Recyclerview:向下滚动
Recyclerview: Scroll down
我有一个动态填充的 RecyclerView。
收到新消息时,我使用此代码向下滚动到最后一条消息:
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
现在的问题是:它不应该向下滚动,如果用户向上滚动阅读旧消息。我怎样才能检测到它?
这是recyclerview的通病。我想您会在这里找到答案- How to use RecyclerView.scrollToPosition() to move the position to the top of current view?
要检查可见项的位置,您可以使用
yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();
你可以找到参考here
有关详细信息,您可以查看此
我假设您正在使用带有某种 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;
}
}
因此在您的 activity 中,例如 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.
}
}
希望这对您有所帮助,否则请告诉我哪里出了问题。
我有一个动态填充的 RecyclerView。
收到新消息时,我使用此代码向下滚动到最后一条消息:
recyclerView.scrollToPosition(adapter.getItemCount() - 1);
现在的问题是:它不应该向下滚动,如果用户向上滚动阅读旧消息。我怎样才能检测到它?
这是recyclerview的通病。我想您会在这里找到答案- How to use RecyclerView.scrollToPosition() to move the position to the top of current view?
要检查可见项的位置,您可以使用
yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();
你可以找到参考here
有关详细信息,您可以查看此
我假设您正在使用带有某种 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;
}
}
因此在您的 activity 中,例如 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.
}
}
希望这对您有所帮助,否则请告诉我哪里出了问题。