2015-04-01 242 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