如何我在一个界面上有两个listview,当触发某项操作,使数据库数据发生变化,两个listview里面的数据都需要更新一下,应该如何刷新呢?
学习是最好的投资!
adapter有notifyDataSetChanged()方法
增加一個listener,函數的實作是執行兩個listview adapter的notifyDataSetChanged再寫一個監聽資料庫變化的函數,收到資料庫變更時執行listener介面函數
你把list加到adapter後,ListView set adapter,當資料來源list改變後,呼叫adapter的notifyDataChange方法應該就會刷新了~
使用eventbus來做事件的分發,然後呼叫adapter的notifyDataSetChanged()方法
「某項操作發生引起資料變化」我沒有理解錯的話,可以用觀察者模式去處理,因為他是一個操作引發另一個操作嘛,而且這樣做也比較簡單,省心。
首先註冊資料監聽:
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 提醒
adapter有notifyDataSetChanged()方法
增加一個listener,函數的實作是執行兩個listview adapter的notifyDataSetChanged
再寫一個監聽資料庫變化的函數,收到資料庫變更時執行listener介面函數
你把list加到adapter後,ListView set adapter,當資料來源list改變後,呼叫adapter的notifyDataChange方法應該就會刷新了~
使用eventbus來做事件的分發,然後呼叫adapter的notifyDataSetChanged()方法
「某項操作發生引起資料變化」我沒有理解錯的話,可以用觀察者模式去處理,因為他是一個操作引發另一個操作嘛,而且這樣做也比較簡單,省心。
首先註冊資料監聽:
ContentObserver 在改變後接受回調,你可以把更新ListView程式碼放到這裡面:
通知ListView更新資料:
上面只是做了思路解釋,實際實現還得靠你自己,你也可以參考我的專案
PS: 感謝 @dabaooline 提醒