2016-04-05 135 views
2

我有一個Activity1,其中有一個RecyclerView的片段。 選擇列表中的項目將啓動修改項目的Activity2。 在Activity2完成後返回到Activity1我觀察到RecyclerView首先繪製了前Activity2狀態(保存的舊項目狀態),然後在onActivityResult中,我做了restartLoader(),它提供了一組更新的數據,然後RecyclerView再次使用新數據。Android RecyclerView繪圖問題(閃爍)

此行爲的問題是RecyclerView 閃爍,因爲它最初繪製舊數據,然後使用新數據重新繪製自己。假設我總是希望在Activity1.onActivityResult()中使用refreshLoader(),是否有避免這種閃爍的好方法?


其他複雜的是,我用空視圖顯示時recycleview是空的...這增加了更加閃爍......

+0

是有使用notifyItemchanged(getAdapterPosition())的任何方法,你可以只更新singleitem數據,而不是整個;? – erluxman

+0

項目也有可能被其他活動刪除或添加到列表中。從技術上講,從數據庫重新加載每個人似乎是比跟蹤單個項目更普遍的方法。 – Califf

+0

抱歉不能得到你的意思? – erluxman

回答

4

刪除更新幢幢回收視圖,您可以使用:

RecyclerView.ItemAnimator animator = mRecyclerView.getItemAnimator(); 
    if (animator instanceof SimpleItemAnimator) { 
     ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false); 
    } 

要更新RecyclerView的商品,則應該使用

notifyItemChanged(int position) 

- N的otify任何註冊觀察員,位置的項目已更改。

代替notifyDataSetChanged()

+0

它確實有幫助,謝謝! – Califf

+0

@ Califf但這似乎並不適用於添加項目,我正在使用加載更多來推動更多的項目在列表中閃爍,但是當我刪除它們時沒有閃爍的問題... –