我正在使用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;
}
感谢。
答案 0 :(得分:0)
你必须使用adapter.notifyDataSetChanged();
。所以你只需创建一个listener
并让Listview
实现它。在listener
中放入adapter.notifyDataSetChanged();
。然后,您只需在每个设备收到信息时调用此方法
答案 1 :(得分:0)
您需要使用 CursorLoader ,它包装 ContentObserver ,它按特定URI订阅 ContentProvider 中的更改。
您的聊天应用应该包含ContentProvider以使用DB,CursorLoader加载您的聊天记录并更新数据库数据更改后的UI ...