LinearLayoutManager#scrollToPositionWithOffset()有时不起作用

时间:2015-04-01 20:00:42

标签: android material-design

@Override
public void onResume() {
 super.onResume();
 recyclerView.post(new Runnable() {
  @Override
  public void run() {
    ((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(position, viewTopDistance);
  }
 });
}
当用户单击启动另一个活动的视图时,

position和viewTopDistance将被正确保存并保留。返回到回收站视图大约2/3的时间列表看起来是正确的,另外1/3的时间它只显示在顶部的前4或5次(scrollToPositionWithOffset不起作用)

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

1 个答案:

答案 0 :(得分:3)

我相信你的问题在于时机。虽然' 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;
    }
  });

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

祝你好运