每次数据更改时更新ListView

时间:2015-04-29 17:02:13

标签: android listview android-listview

我正在使用PHP和Java构建聊天,我使用Json文件从聊天中获取数据,并且我正在插入Data调用PHP文件,该文件将新消息插入到我的数据库中。

我列出了Listview中的所有邮件,并且每次发送新邮件时我都会尝试更新listview,我的代码正常运行,但我想自动更新我发送新邮件时Listview

我必须再次点击聊天室才能看到Listview已更新。我想更新来自用户,接收者和发件人的listview

我尝试使用notifyDataSetChanged();更新我的适配器,但它不起作用。

我该怎么做?

代码:

我的适配器:

@Override
protected void onPostExecute(Void result) {
    super.onPostExecute(result);


    // Dismiss the progress dialog
    if (pDialog.isShowing())
        pDialog.dismiss();
    /**
     * Updating parsed JSON data into ListView
     * */


    adapter =  new costumeadapter(
                    ChatRoomActivity.this,
                    contactList,
                    R.layout.chat_row,
                    new String[]{ TAG_MESSAGE, TAG_CONVERSATION },
                    new int[]{ R.id.name, R.id.conversationid });

    setListAdapter(adapter);

}

public View getView(int position, View convertView, ViewGroup parent){

      View v = super.getView(position, convertView, parent);


      TextView text = (TextView) v.getTag();

      if(text == null){
         text = (TextView) v.findViewById(R.id.name);
          v.setTag(text);
      } 

     String pos = (String) ((Map)getItem(position)).get(TAG_POSITION);

     text.setBackgroundResource(pos.equals("left") ? R.drawable.bubble_green : R.drawable.bubble_yellow);

     conversationid = (TextView)v.findViewById(R.id.conversationid);

     send.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {

            String getmessage = txtmessage.getText().toString();
            String getconversationid = conversationid.getText().toString();

            SendMessage mTask = new SendMessage();
            mTask.execute(sessionid,getmessage,getconversationid);

            adapter.notifyDataSetChanged();
         }
     });

      return v;  

   }

感谢。

2 个答案:

答案 0 :(得分:0)

你必须使用adapter.notifyDataSetChanged();。所以你只需创建一个listener并让Listview实现它。在listener中放入adapter.notifyDataSetChanged();。然后,您只需在每个设备收到信息时调用此方法

答案 1 :(得分:0)

您需要使用 CursorLoader ,它包装 ContentObserver ,它按特定URI订阅 ContentProvider 中的更改。

所以...

您的聊天应用应该包含ContentProvider以使用DB,CursorLoader加载您的聊天记录并更新数据库数据更改后的UI ...