2015-04-01 264 views
0
@Override 
public void onResume() { 
super.onResume(); 
recyclerView.post(new Runnable() { 
    @Override 
    public void run() { 
    ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(position, viewTopDistance); 
    } 
}); 
} 

當用戶單擊啓動另一個活動的視圖時,position和viewTopDistance被正確保存並保持正確。回到大約2/3的時間清單看起來是正確的回收站視圖時,其他三分之一的時間只顯示在頂部的前4到5次(scrollToPositionWithOffset不起作用)LinearLayoutManager#scrollToPositionWithOffset()有時不工作

任何爲什麼有時會失敗的想法?

回答

3

我相信你的問題在時間上。儘管「發佈」延遲了「scrollToPositionWithOffset」,但視圖可能並不總是準備好。我使用以下構造。

mLstView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
    @Override 
    public boolean onPreDraw() { 
     if (mLstView.getChildCount() > 0) { 
     recyclerView.getViewTreeObserver().removeOnPreDrawListener(this); 
     llMgr.scrollToPositionWithOffset(position, viewTopDistance); 
     return true; 
     } 
     return false; 
    } 
    }); 

成功(迄今爲止)。您也可以查看實現此構造的demo code(LstFrag.select)。

好運

+0

我在StackOverflow上找到了多個建議,並且這是唯一可靠工作的建議。 – ErikPerik 2017-11-02 14:09:06