zoukankan      html  css  js  c++  java
  • ListView动态刷新adapter.notifyDataSetChanged()无反应

     

     一个动态刷新ListView,遇到一个问题,调用notifyDataSetChanged()方法,数据源已经存在但是并没有动态刷新!

      首先我们需要了解notifyDataSetChanged方法

      它是通过一个外部的方法控制如果适配器的内容改变时需要强制调用getView来刷新每个Item的内容,可以实现动态的刷新列表的功能。

      但是他其中有一个细节,需要注意,

      当发送消息时我们声明一个

                  ArrayList<String> list1 =new ArrayList<String>();

                  list1.add("messge1")

                  adapter.notifyDataSetChanged();

      当接收消息时我们又声明一个

                  ArrayList<String> list2 =new ArrayList<String>();

                  list2.add("message2");

                  adapter.notifyDataSetChanged();

      虽然我们在每个方法底部调用notifyDataSetChanged();但是无刷新!

      在这个时候list1和list2指向不同的堆内存,在方法底部调用notifyDataSetChanged()方法就不起作用了!这时的list已经不是原来的list了。所以它无法推断,更不能做出响应。

      但是我们有另外一个办法就是handler

      接

            将发送方法更改一小下

                  ArrayList<String> list1 =new ArrayList<String>();

                  list1.add("messsge1");

                  handler.sendEmptyMessage(0);

            接收的方法       

                  ArrayList<String> list2 =new ArrayList<String>();

                  list2.add("message2");

                  handler.sendEmptyMessage(0);

        我们将刷新数据的方法写在Hadler中,即可解决我们的问题

          private Handler handler = new Handler(){

            public void handleMessage(android.os.Message msg){

              int what=msg.what;

              switch(what){

                case 0:

                  adapter.notifyDataSetChanged();

                  break;

                default :

                  break;

              }

            }

          }

  • 相关阅读:
    10分钟轻松设置出 A+ 评分的 HTTP/2 网站
    GGSN与SGSN简介
    cocos游戏开发小白教程网站
    cocos2d-x JS 字符串
    cocos2d-x android工程接入第三方支付宝SDK
    pyCharm编辑器激活使用
    cocos2d-x C++ iOS工程集成第三方支付宝支付功能
    (已解决)在linux的虚拟机上安装vmware tools(实现windows与虚拟机之间的文件交互复制粘贴)
    虚拟机 liunx系统以 root 身份登录权限
    mac系统搭建SVN版本控制
  • 原文地址:https://www.cnblogs.com/spps/p/8734660.html
Copyright © 2011-2022 走看看