2015-08-22 64 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); 
相關問題