80,351
社区成员
发帖
与我相关
我的任务
分享
public abstract class BaseActivity extends AppCompatActivity implements TIMMessageListener{
public void dealMessage(List<TIMMessage> messageList){
//父类里面没有具体实现
LogUtils.LogI("父类的处理方法,"+this.getClass());
}
//监听新消息
@Override
public boolean onNewMessages(List<TIMMessage> list) {
LogUtils.LogI("新消息:"+list.size());
dealMessage(list);
return false;
}
}
public class ActivityGuidePage extends BaseActivity{
//这里只是一个欢迎页,没有执行dealMessage方法
}
public class ActivityHomePage extends BaseActivity {
@Override
public void dealMessage(List<TIMMessage> messageList) {
super.dealMessage(messageList);
//新消息到达之后将新消息显示出来
LogUtils.LogI("Activity开始处理消息");
for(TIMMessage timMessage : messageList){
for(int i = 0; i < timMessage.getElementCount(); i++){
if(timMessage.getElement(i).getType() == TIMElemType.Text){
TIMTextElem textElem = (TIMTextElem) timMessage.getElement(i);
//文本消息,将文本消息添加到聊天框中
fragmentChat.addTextMessage(textElem,timMessage.isSelf());
}
}
}
}
}
但是在ActivityHomePage中没有执行重写的父类的方法,在ActivityGuidePage中我没有重写父类的方法,却执行了,很奇怪的问题 [quote=引用 1 楼 qq_20330595 的回复:] 乍一看没毛病 重写方法是java基础 没必要怀疑他的真实性。
但是在ActivityHomePage中没有执行重写的父类的方法,在ActivityGuidePage中我没有重写父类的方法,却执行了,很奇怪的问题 乍一看没毛病 重写方法是java基础 没必要怀疑他的真实性。
private TIMMessageListener listener;//首先我认为你会在某个class里面放置一个监听
listener=this;//然后初始化它
List<TIMMessage> list=new ArrayList<TIMMessage>();//当有新消息来时把它们整理到某个集合
...
...//经过一系列数据处理
listener.onNewMessages(list);//最终通过最先放置的监听回调onNewMessages方法
因此这么看来这里的初始化的this才是关键,如果你这里的this是ActivityGuidePage那么你的日志肯定会打在ActivityGuidePage中。而如果你这里初始化的TIMMessageListener 监听与ActivityHomePage毫无关系,那么自然不会回调到ActivityHomePage
乍一看没毛病 重写方法是java基础 没必要怀疑他的真实性。
实现了接口,还要有个能调这个接口中的方法才行,不是说实现了接口,接口中的某个方法自己就执行了。所以关键看你如何调用接口中的方法