搜尋

首頁  >  問答  >  主體

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

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

PHPzPHPz2772 天前608

全部回覆(5)我來回復

  • 伊谢尔伦

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

    adapter有notifyDataSetChanged()方法

    回覆
    0
  • 大家讲道理

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

    增加一個listener,函數的實作是執行兩個listview adapter的notifyDataSetChanged
    再寫一個監聽資料庫變化的函數,收到資料庫變更時執行listener介面函數

    回覆
    0
  • PHPz

    PHPz2017-04-17 16:23:24

    你把list加到adapter後,ListView set adapter,當資料來源list改變後,呼叫adapter的notifyDataChange方法應該就會刷新了~

    回覆
    0
  • 天蓬老师

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

    使用eventbus來做事件的分發,然後呼叫adapter的notifyDataSetChanged()方法

    回覆
    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 提醒

    回覆
    0
  • 取消回覆