如何我在一个界面上有两个listview,当触发某项操作,使数据库数据发生变化,两个listview里面的数据都需要更新一下,应该如何刷新呢?
大家讲道理2017-04-17 16:23:24
增加一個listener,函數的實作是執行兩個listview adapter的notifyDataSetChanged
再寫一個監聽資料庫變化的函數,收到資料庫變更時執行listener介面函數
PHPz2017-04-17 16:23:24
你把list加到adapter後,ListView set adapter,當資料來源list改變後,呼叫adapter的notifyDataChange方法應該就會刷新了~
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 提醒