2
我開始在我的新學校項目中使用RecyclerView
,並以RealmDB
作爲數據源。到目前爲止,它是相當好的,直到我刷新列表視圖。這裏是demo。由於notifyDataSetChanged()
發生黑屏閃爍。如果我想使它不那麼明顯,我可以設置白色背景而不是黑色。如何正確刷新我的回收站列表視圖
但我應該使用什麼機制來徹底消除那個明顯的屏幕閃爍?我會非常感激,如果我會得到相同的結果,如here
如何刷新列表視圖到目前爲止?
- STEP 1.我稱爲Web API收到帖子
STEP 2.獲取結果,更新或將其添加到#realm
mRealm.executeTransactionAsync(new Realm.Transaction() { @Override public void execute(Realm realm) { for (Post post : posts) { //create post realm.copyToRealmOrUpdate(post); //create common result row CommonResult cr = new CommonResult(); int id = module.hashCode() + post.getId(); cr.setId(id); cr.setPost(post); cr.setPostid(post.getId()); cr.setTag(module.hashCode()); realm.copyToRealmOrUpdate(cr); } } }, new Realm.Transaction.OnSuccess() { @Override public void onSuccess() { RealmResults<CommonResult> cr = mRealm.where(CommonResult.class) .equalTo("tag", module.hashCode()) .findAll(); mPostView.showListingView(cr, hasNext()); } });
STEP 3.境界將通知修改到適配器,通知塊將在回收站適配器上調用
notifyDataSetChanged()
。
在我的適配器(RecyclerView.Adapter
)
this.data.addChangeListener(new RealmChangeListener<RealmResults<CommonResult>>() {
@Override
public void onChange(RealmResults<CommonResult> element) {
notifyDataSetChanged();
}
});
UPDATE 我改變了notifyDataSetChanged()
到notifyItemChanged(i, element)
。閃爍消失,動畫變得更加流暢:-)
如何以及在哪裏你打的onChange(---)偵聽器的方法 – Rahul
嗨@Rah,RealmDB會如果有變化,自動調用此方法在這張桌子裏面。 – Sanny
你可以在onChange()方法中添加一些日誌,並檢查日誌獲取觸發器/打印的次數,因爲我有很多記錄,並且這種方法被多次調用 – Rahul