当前位置: 代码迷 >> 综合 >> 最近 自己写了一个长链接 的聊天室,遇到了 ListView数据变化后 setSelection 无效 的情况!!
  详细解决方案

最近 自己写了一个长链接 的聊天室,遇到了 ListView数据变化后 setSelection 无效 的情况!!

热度:45   发布时间:2023-10-20 14:38:08.0

网上说  加下面的属性 

  1. android:stackFromBottom="false"

  2. android:transcriptMode="normal"

这个只能保证 进入界面 listview  数据在底部展示

经过我的 百度 研究 结合  

应该这样写 :

 

 

//在长链接的服务内的onMessage 方法内
//长链接的接收服务器返回的,用户发送的某一条信息,发送广播,通知主角面刷新信息列表
@Override
public void onMessage(WebSocket webSocket, String text) {
//接收消息的回调super.onMessage(webSocket, text);//收到服务器端传过来的消息text//接收信息,发送广播 用于刷新uiIntent intent = new Intent();intent.setAction(data);intent.putExtra("json", text);sendBroadcast(intent);}
 

 

 

//主界面 ,注册广播,接受长链接 发送过来的信息
IntentFilter filter = new IntentFilter();
filter.addAction(Socket_BackService.data_agin);
registerReceiver(updata_chatlist, filter);
private BroadcastReceiver updata_chatlist = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stub//在 长链接的接受数据的回调内,服务器返回新发信息,将新发的数据追加到原始数据列表中try {JSONObject jsonObject = new JSONObject(intent.getStringExtra("json"));Entity_Chat_History entity_chat_history;entity_chat_history = new Entity_Chat_History();entity_chat_history.setName(jsonObject.getString("name"));entity_chat_history.setId(jsonObject.getString("id"));entity_chat_history.setImage(jsonObject.getString("image"));entity_chat_history.setBody(jsonObject.getString("body"));entity_chat_history.setTime(jsonObject.getString("time"));chat_datalist.add(entity_chat_history);//总是只显示50条if (chat_datalist.size() > 50) {chat_datalist.remove(0);}//开启 Ui 线程刷新界面,让列表总是显示最新一条数据runOnUiThread(new Runnable() {public void run() {adapter_chatRoom.notifyDataSetChanged();mListView.setSelection(chat_datalist.size());}});} catch (Exception e) {e.printStackTrace();}}
};
亲测可行,解决了你的问题的话 给个赞哦,  这个也困扰了我快一下午 我擦
  相关解决方案