2015-06-20 75 views
1

我試圖創建一個Recyclerview,它將滾動到頂部的第一個,然後動畫添加一個項目到recyclerview上。Recyclerview - smoothScrollToPosition到列表的頂部,然後動畫添加項目

這是我到目前爲止的代碼:

 while (!mLayoutManager.isSmoothScrolling()) { 
      mRecyclerView.smoothScrollToPosition(0); 
     } 
     PostList.add(0, post); 
     mAdapter.notifyItemInserted(0); 
     mAdapter.notifyItemRangeChanged(1, PostList.size()); 

這確實滾動到頂部,但在加入該項目沒有設置動畫(雖然它被添加到列表)。

我認爲這是因爲添加動畫與smoothScrollToPosition動畫同時發生,因此當它到達頂部時,添加動畫已經完成,因此我們看不到它。

我可以使用一個Handler.postDelayed給我的滾動動畫一段時間完成,但這並不可取,因爲我不知道smoothScrollToPosition動畫將完成的時間。

回答

4

我想你希望什麼時候完成,滾動將完成。它不是如何工作的,滾動發生在動畫框架中,如果你要放一個while循環等待它完成,你的應用程序將會凍結,因爲你將阻塞主線程。

相反,你可以做這樣的事情:

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { 
    public void onScrollStateChanged(RecyclerView rv, int state) { 
     if (state == RecyclerView.SCROLL_STATE_IDLE) { 
      PostList.add(0, post); 
      mAdapter.notifyItemInserted(0); 
      rv.removeOnScrollListener(this); 
     } 
    } 
}); 
recyclerView.smoothScrollToPosition(0); 

沒有測試的代碼,但其基本思路是增加一個滾動監聽器得到通知時,平滑滾動停止,然後添加項目。

+0

嗨,感謝您的回覆 - 我似乎無法在recyclerview類中找到addOnScrollListener或removeOnScrollListener方法,即使它列爲文檔中的方法https://developer.android.com/reference/安卓/支持/ V7 /空間/ RecyclerView.html#removeOnScrollListener(android.support.v7.widget.RecyclerView.OnScrollListener)。我很難過,我正在使用com.android.support:recyclerview-v7:22.0.+ – Simon

+1

使用22.2。之前,有setOnScrollListener。 – yigit

+1

謝謝 - 代碼工作,如果我再向該方法添加一行:mRecyclerView.smoothScrollToPosition(0); – Simon

相關問題