LinearLayoutManager#scrollToPositionWithOffset() 有时不起作用

rod*_*dly 0 android material-design

@Override
public void onResume() {
 super.onResume();
 recyclerView.post(new Runnable() {
  @Override
  public void run() {
    ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(position, viewTopDistance);
  }
 });
}
Run Code Online (Sandbox Code Playgroud)

当用户单击启动另一个活动的视图时,位置和 viewTopDistance 会正确保存和保留。返回回收器视图后,大约 2/3 的时间列表看起来正确,另外 1/3 的时间它仅在顶部显示前 4 或 5 次(scrollToPositionWithOffset 不起作用)

关于为什么有时会失败的任何想法?

sea*_*npj 5

我相信你的问题出在时间上。尽管“post”延迟了“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;
    }
  });
Run Code Online (Sandbox Code Playgroud)

成功(到目前为止)。您还可以查看实现此构造的演示代码(LstFrag.select)。

祝你好运