• 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;

              }

            }

          }

  • 相关阅读:
    如何在IDEA中查看Gradle项目的所有依赖关系
    YUYV&YV12&mtk6763
    MTK-shot mode
    Thread中,join()方法
    高通平台常用缩写
    Android.mk用法详解
    HAL层编写规范
    MMU
    Linux设备驱动中断机制
    阻塞和非阻塞I/O
  • 原文地址:https://www.cnblogs.com/spps/p/8734660.html
Copyright © 2020-2023  润新知