我有一个动态填充的RecyclerView。
当一条新消息到达时,我使用下面的代码向下滚动到最后一个条目:
recyclerView.scrollToPosition(adapter.getItemCount() - 1);现在的问题是:如果用户滚动以读取旧消息,则不应该向下滚动。我怎么能察觉到呢?
发布于 2019-05-05 04:26:01
我假设您使用的是带有某种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.
}
}希望这能有所帮助,否则请让我知道出了什么问题。
发布于 2019-05-04 00:59:12
这是回收的常见问题。我想你会在这里找到答案的-- 如何使用RecyclerView.scrollToPosition()将位置移动到当前视图的顶部?
发布于 2019-05-04 06:23:20
若要检查可见项的位置,请使用
yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();您可以找到参考这里
有关更多详细信息,您可以查看此stackoverflow线程
https://stackoverflow.com/questions/55978333
复制相似问题