2017-08-06 55 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);