请检查 layout_height。它应该是 android:layout_height="match_parent"
在 UI 线程中运行 smoothScrollToPosition
我的代码中的代码片段
<android.support.v7.widget.RecyclerView
android:id="@+id/topic_screen_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="18dp"
/>
//这里 topicScreenList 引用了我的 Recylerview: //-messageAdapter: 引用适配器对象
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
LinearLayoutManager layoutManager = new LinearLayoutManager(getContext());
layoutManager.setStackFromEnd(true);
topicScreenList.setLayoutManager(layoutManager);
topicScreenList.setAdapter(messageAdapter);
}
收到任何新消息后,从后端服务调用以下代码
- 这里 MessageItem 引用适配器使用的新消息项
@Override
public void onNewMessage(final MessageItem messageItem) {
if (getActivity() != null) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
messageAdapter.addMessageToEnd(messageItem);
topicScreenList.smoothScrollToPosition(messageAdapter.getItemCount());
}
});
}
}
//code from my Adapter
public void addMessageToEnd(MessageItem messageItem) {
messageItems.add(messageItem);
notifyItemInserted(messageItems.size() -1);
}