2015-08-22 58 views
29

我有一个片段,其中有RecyclerViewLinearLayoutManager其中有CardView项目。点击时有一个浮动动作按钮,项目应该滚动到顶部。我已尝试使用scrollToPosition以及scrollToPositionWithOffsetRecyclerView以及LinearLayoutManager,如下所示。但它根本没有效果。这是为什么?任何人都可以请帮助我。使用LinearLayoutManager滚动到RecyclerView顶部

而且我已将RecyclerView直接放入了xml文件中的SwipeRefreshView。一旦将适配器设置为RecyclerView,我打电话给setFloatingActionButton

public void setFloatingActionButton(final View view) { 
    float = (android.support.design.widget.FloatingActionButton) getActivity().findViewById(R.id.float); 
    float.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
    mRecyclerView.smoothScrollToPosition(0); 


      android.support.design.widget.Snackbar.make(view, "Scrolled to Top", android.support.design.widget.Snackbar.LENGTH_SHORT) 
        .setAction("Ok", new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          LinearLayoutManager llm = (LinearLayoutManager) mRecyclerView.getLayoutManager(); 
          llm.scrollToPosition(0); 

         } 
        }) 
        .setActionTextColor(getActivity().getResources().getColor(R.color.coloLink)) 
        .show(); 
     } 
    }); 
} 
+0

尝试'mLayoutManager.scrollToPositionWithOffset(0,0);' – Antrromet

+0

是啊,我已经尝试了本。但这有太多就像scrollToPosition没有影响。 – SRBhagwat

+0

这很奇怪,因为即使我有一个类似于你的布局。我有一个带有布局管理器的'RecyclerView',放在'SwipeRefreshview'中,这对我很有用。 – Antrromet

回答

69

从上述评论继续,理想情况下,浮动操作按钮的onClick

mLayoutManager.scrollToPositionWithOffset(0, 0); 

应该工作更换

mRecyclerView.smoothScrollToPosition(0); 

。您也可以删除SnackBar代码,因为您不需要它。所以,一切都在你以上所有方法应该看起来像

public void setFloatingActionButton(final View view) { 
    float actionButton = (android.support.design.widget.FloatingActionButton) getActivity() 
      .findViewById(R.id.float); 
    actionButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView 
        .getLayoutManager(); 
      layoutManager.scrollToPositionWithOffset(0, 0); 
     } 
    }); 
} 

如果你说的是,上述不工作,然后测试该onClick()甚至被称为与否。尝试在其中添加日志消息并查看是否打印。

+0

是的,我实际上是通过从这个方法中删除其他片段的调用来获得它的。我直接将fab创建放在onCreate()方法中,现在工作完全正常。 – SRBhagwat

+0

谢谢你。它帮助:) – SRBhagwat

+0

并与小吃店它不工作。这很好,因为不需要小吃店。 – SRBhagwat

3

呼叫 'scrollToPosition(0)' 使用此:

public void scrollToPosition(final int position) { 
    if (mRecyclerView != null) { 
     getHandler().post(new Runnable() { 
      @Override 
      public void run() { 
       mRecyclerView.scrollToPosition(position); 
       if (position == 0) { 
        LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager(); 
        layoutManager.scrollToPositionWithOffset(0, 0); 
        mScrollView.fullScroll(View.FOCUS_UP); 
       } 
      } 
     }); 
    } 
} 
+0

什么是mScrollView ..? – david

+0

private NestedScrollView mScrollView; –

3

使用方法smoothScrollToPosition()为我工作了最新的Android版本。

layoutManager.smoothScrollToPosition(mRecyclerView, null, 0); 
相关问题