2017-08-06 212 views
0

我想在加載活動後滾動到RecyclerView列表的底部。每次我發送或接收消息時,都需要滾動到底部來閱讀消息。如何配置它在發送或接收消息時自動滾動?在輸入時自動將RecyclerView列表滾動到底部

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

recyclerView = (RecyclerView) findViewById(R.id.chatWindow_rec); 
recyclerView.setHasFixedSize(true); 

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
linearLayoutManager.setStackFromEnd(true); 
recyclerView.setLayoutManager(linearLayoutManager); 

recyclerView.setAdapter(Adapter); 

我試過StackFromEnd,recyclerview.ScrollToPosition(ListMessage.size()) ......沒有結果。我怎樣才能解決這個問題?

+2

後適配器項目數你追加到ListMessage名單?並在追加後你做ScrollToPosition? –

+0

Listmessage包含我使用ScrollToPosition(ListMessage.size))的所有新消息但無法工作 –

回答

0

使用這行代碼中的希望它會幫助你:

layoutManager.setReverseLayout(true); 
0

首先,你應該確保在適配器列表<>用新的信息進行了更新。

然後使用RecylcerView.smoothScrollToPosition(List.size())滾動到列表的底部。

或者,使用RecylcerView.smoothScrollToPosition(MessageListAdapter.getItemCount())

你應該因爲getItemCount第二個選項(去)是適配器的默認方法,只記得overidde它。

public static RecyclerView.LayoutManager createVerticalLayoutManager(Context context) { 
    LinearLayoutManager layoutManager = new LinearLayoutManager(context 
      , LinearLayoutManager.VERTICAL 
      , false); 
    return layoutManager; 
} 

讓你的RecyclerView的寬度和高度作爲match_parent。在適配器

呼叫更新時,追加新的消息

 mMessageAdapter.notifyItemChanged(mMessageAdapter.getItemCount()); 

的代碼行上面指定的最新項目剛剛更新適配器。

+0

該列表使用新消息更新,並且我使用了smoothscrooltoposition lise.size但dosnt工作 –

+0

在您的適配器中,確保您覆蓋了getItemCount() 。在該方法中,只需返回list.size()。 然後使用scrollToPosition和Adapter.getItemCount()。 確保在將最新消息追加到消息列表中後調用該方法。 –

+0

我懷疑你的消息列表不顯示任何東西嗎?因爲RecyclerView必須使用LayoutManager進行正確的設置。 我剛更新了我的答案。 –

0

1,當你收到新的消息編寫一個函數返回,然後將數據添加到適配器使用

recyclerView.smoothScrollToPosition(adapter.getCount()-1);