cari

Rumah  >  Soal Jawab  >  teks badan

Android 如何刷新当前activity的显示数据?

如何我在一个界面上有两个listview,当触发某项操作,使数据库数据发生变化,两个listview里面的数据都需要更新一下,应该如何刷新呢?

PHPzPHPz2772 hari yang lalu606

membalas semua(5)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-04-17 16:23:24

    adapter有notifyDataSetChanged()方法

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-17 16:23:24

    增加一个listener,函数的实现是执行两个listview adapter的notifyDataSetChanged
    再写一个监听数据库变化的函数,收到数据库变化时候执行listener接口函数

    balas
    0
  • PHPz

    PHPz2017-04-17 16:23:24

    你把list添加到adapter后,ListView set adapter,当数据源list发生变化后,调用adapter的notifyDataChange方法应该就会刷新了~

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-17 16:23:24

    使用eventbus来做事件的分发,然后调用adapter的notifyDataSetChanged()方法

    balas
    0
  • PHP中文网

    PHP中文网2017-04-17 16:23:24

    “某项操作发生引起数据变化”我没有理解错的话,可以用观察者模式去处理,因为他是一个操作引发另一个操作嘛,而且这样做也比较简单,省心。

    首先注册数据监听:

     getContentResolver().registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer) ;
    

    ContentObserver 在发生改变后接受回调,你可以把更新ListView代码放到这里面:

     private ContentObserver mObserver = new ContentObserver(new Handler()) {
            @Override
            public void onChange(boolean selfChange) {
                 // 重新查询数据
                 
                 ...
                 
                 // 更新ListView1
                 listView1.notifyDataSetChanged();
                 // 更新ListView2
                 listView2.notifyDataSetChanged();
            }
        }
    

    通知ListView更新数据:

    getContentResolver().notifyChange(Uri uri, null, false);
    

    上面只是做了思路解释,实际实现还得靠你自己,你也可以参考我的项目

    PS: 感谢 @dabaooline 提醒

    balas
    0
  • Batalbalas