当前位置: 首页 > 知识库问答 >
问题:

回收商视图:向下滚动

单于飞鸣
2023-03-14

我有一个动态填充的RecyclerView。

当新消息到达时,我使用此代码向下滚动到最后一个条目:

recyclerView.scrollToPosition(adapter.getItemCount() - 1);

现在的问题是:如果用户已经向上滚动阅读旧消息,它不应该向下滚动。怎么才能检测出来?

共有3个答案

施刚毅
2023-03-14

要检查可见项目的位置,您可以使用

yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();

你可以在这里找到参考

要了解更多细节,您可以查看这个stackoverflow线程

马和硕
2023-03-14

这是recyclerview的常见问题。我想你会在这里找到答案-如何使用RecyclerView。scrollToPosition()将位置移动到当前视图的顶部?

司马高昂
2023-03-14

我假设您正在使用带有某种RecyclizerView之类的自定义适配器。只需创建静态布尔变量,当适配器中达到底部时,该变量有助于保持真实,如下所示,我假设在这种情况下使用recyclerView。

public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {

    public static boolean bottomReached = false;

      @Override //Make sure it happens on bindViewHolder or related...
        public void onBindViewHolder(final ViewHolder holder, int position) {
                if (position == data.size() - 1)
                    bottomReached = true;
                else
                    bottomReached = false;

        }

}

因此,在您的活动中,例如聊天活动,我们确实喜欢下面的内容。

public class ChatActivity extends AppCompatActivity{
ChatAdapter chatAdapter;

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);

        chatAdapter = new ChatAdapter(this, messagesDataSample);
}

private void gotNewMessage(){
   if(chatAdapter.bottomReached)
      recyclerView.scrollToPosition(adapter.getItemCount() - 1);
   else
      // else is not necessary as you don't want to do anything.
}

}

希望这有帮助,否则请让我知道出了什么问题。

 类似资料:
  • 我做了一个水平循环视图,效果很好(多亏了这个),但滚动和数据的方向是从左向右扩展的;那么,我该如何更改RecyclerView滚动方向,如下图所示? 我的代码:

  • 在其他回收器视图中有一个回收器视图。两者都需要垂直滚动。外部回收器视图滚动正常,但内部回收器视图滚动不正常。 这是代码: ViewAdapter如下: 我尝试了以下两种回收商观点,但都无法解决问题 也尝试了这个:

  • 我有一个水平回收视图。每个子级包含一个TextView和一个垂直RecyclerView。垂直RecyclerView的子级仅包含TextView。 垂直滚动非常平滑,但水平滚动滞后很多。我已经尝试在onBindViewHolder中使用swapAdapter,而不是setAdapter,但这并没有解决问题。我也尝试过更改数据集并调用notifyDataSetChanged(),但这也没有帮助。

  • 问题在于,当软键盘出现或消失时,recyclerview几乎向下滚动一整行。 这里有一个直观的例子: 活动的布局使用ChatKit UI库中的MessageInput和MessageList对象,如下所示: 该活动还在清单中设置了 adjustPan: Recyclerviews线性布局管理器设置为垂直,具有反向布局和默认项目animator: 理想情况下,我不想设置键盘侦听器并在每次显示/隐藏键

  • 我正在拼命地尝试在一个使用Kotlin的android应用上实现无休止的滚动。所有的教程要么是无用的,因为他们没有正确地解释事情。例如:https://github.com/chetdeva/recyclerView-bindings 它看起来很有前途,但作者使用了这样的短语,比如“把这个放在你的bindingadapter中”,所以我查看了这个是什么,我找到了一个java文件,但如果你在其中插入

  • 我正在使用下面的代码创建一个回收器视图。recyclerview有一个网格布局管理器,其项计数最多为每行2个。 不幸的是,我嵌套在ConstraintLayout中的回收器视图根本没有滚动。我错过了什么?约束布局是否支持相同的?