更新listview的最后一行时出现问题

时间:2014-05-28 17:41:48

标签: android listview

我正在使用自定义适配器来填充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);
    }
}

此处理程序无效。我只收到显示的图片。

请帮忙

1 个答案:

答案 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);
    }