【问题标题】:Recyclerview: Scroll downRecyclerview:向下滚动
【发布时间】:2019-05-03 23:58:07
【问题描述】:

我有一个动态填充的 RecyclerView。

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

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

现在的问题是:如果用户向上滚动以阅读较旧的消息,则不应向下滚动。如何检测?

【问题讨论】:

  • 你能分享一个有这种行为的小 gif/视频吗?
  • 我假设您这样做是为了聊天或消息传递应用程序?所以你希望当用户向上滚动阅读旧消息时,如果有新消息进来,你不希望滚动到底部的代码被执行?
  • @Whales 完全正确
  • 我认为没有人理解这个问题
  • 这是你可以做的,检查recyclerView是否已经在底部,如果是,不要执行你的scrollToPosition代码,否则执行它。我将为您粘贴示例代码作为可读性的答案。

标签: android android-recyclerview recyclerview-layout


【解决方案1】:

我假设您正在使用带有某种 RecyclerView 左右的自定义适配器。 只需创建静态布尔变量,当您的适配器达到底部时帮助保持真实,如下所示,我假设在这种情况下是 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;

        }

}

因此,在您的活动中,例如 chatActivity,我们执行如下操作。

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.
}

}

希望这会有所帮助,否则请告诉我出了什么问题。

【讨论】:

    【解决方案2】:

    recyclerview 的常见问题。我想你会在这里找到答案-How to use RecyclerView.scrollToPosition() to move the position to the top of current view?

    【讨论】:

      【解决方案3】:

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

      yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();
      

      你可以找到参考here

      更多详情可以查看stackoverflow thread

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        相关资源
        最近更新 更多