gpt4 book ai didi

android - 添加到 RecyclerView 的项目未显示在底部

转载 作者:行者123 更新时间:2023-11-30 01:15:02 27 4
gpt4 key购买 nike

我有一个 RecyclerView,我用它来以文本应用程序类型的方式显示消息。我的意思是,添加到 RecyclerView 的新消息应该出现在底部。

目前,我在 LinearLayoutManager 上使用 .setStackFromEnd(true) 使消息从底部开始显示:

layMng = new LinearLayoutManager(this);
layMng.setStackFromEnd(true);

mRecyclerView.setLayoutManager(layMng);
mRecyclerView.setAdapter(mAdapter);

发生的情况是,当接收到足够多的消息并且消息列表即将溢出屏幕顶部时,它将停止始终在底部显示新消息。我必须手动向下滚动才能看到新增内容。

我如何让它始终显示最新消息或在收到新项目时让 RecyclerView 向下滚动?

我在我的布局管理器上尝试了各种方法,例如 .scrollToPosition().scrollToPositionWithOffset() 但到目前为止我看到的所有建议都没有奏效。关于这个问题的一些 StackOverflow 热门问题的热门答案甚至无法解决原始问题..

那么这是怎么做到的呢?

最佳答案

请检查layout_height。应该是 android:layout_height="match_parent"

在 UI 线程中运行 smoothScrollToPosition

我的代码中的代码 fragment

            <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);
}

关于android - 添加到 RecyclerView 的项目未显示在底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982198/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com