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

网上说  加下面的属性 

  1. android:stackFromBottom="false"

  2. android:transcriptMode="normal"

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

经过我的 百度 研究 结合  

应该这样写 :

 

 

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

    //接收信息,发送广播 用于刷新ui
    Intent 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() {
    @Override
    public 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();
        }


    }
};



亲测可行,解决了你的问题的话 给个赞哦,  这个也困扰了我快一下午 我擦
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值