Recyclerview:向下滚动

时间:2019-05-03 23:58:07

标签: android android-recyclerview recyclerview-layout

我有一个动态填充的RecyclerView。

收到新邮件时,我使用以下代码向下滚动到最后一个条目:

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

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

3 个答案:

答案 0 :(得分: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.
}

}

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();

您可以找到参考文献here

有关更多详细信息,您可以查看此stackoverflow thread