我正在使用自定义适配器来填充android中的listview。我正在使用XMPP开发一个聊天应用程序。在消息监听器内部,我将msg插入本地sqlite db并填充listview。当我发送消息时,我将该消息插入本地数据库并填充列表视图。发送消息时,我将收到回传消息。所以我需要的是,我需要显示仅在列表视图的最后一项中发送的文本,并且列表视图的其他行中的所有其他文本需要在那时显示为已传递。然后,当我获得交付状态时,我需要将文本更改为仅在列表视图的最后一行中传递。
我该怎么做?请帮忙。
更新
在此处添加适配器的最新代码:
else if(status.equals("Received message")) {
if(position == chatHistoryVector.size()-1) {
Handler handler = new Handler();
Runnable runnable = new Runnable(){
public void run() {
imgStatus.setBackgroundResource(R.drawable.sending);
}
};
handler.postDelayed(runnable, 1000);
imgStatus.setBackgroundResource(R.drawable.deliverd);
} else {
imgStatus.setBackgroundResource(R.drawable.deliverd);
}
}
此处理程序无效。我只收到显示的图片。
请帮忙
答案 0 :(得分:0)
在您发布的代码中
imgStatus.setBackgroundResource(R.drawable.deliverd);
将立即执行,并且您的Runnable将在一秒钟后排队等待执行。这就是发送状态在发送状态之前显示的原因。
试试这个 你班级的某个地方声明一个新的处理程序
Handler deliveredHandler = new Handler()
@Override
public void handleMessage(Message msg) {
imgStatus.setBackgroundResource(R.drawable.deliverd);
}
};
并将if条件更改为
if(position == chatHistoryVector.size()-1) {
Handler handler = new Handler();
Runnable runnable = new Runnable(){
public void run() {
imgStatus.setBackgroundResource(R.drawable.sending);
deliveredHandler.sendEmptyMessageDelayed(0, 1000);
}
};
handler.postDelayed(runnable, 1000);
}