Recyclerview: прокрутите вниз - PullRequest
0 голосов
/ 04 мая 2019

У меня есть RecyclerView, который заполняется динамически.

Когда приходит новое сообщение, я использую этот код для прокрутки до последней записи:

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

Теперь проблема заключается в следующем:Он НЕ должен прокручиваться вниз, если пользователь прокрутил вверх, чтобы прочитать старые сообщения.Как я могу это обнаружить?

Ответы [ 3 ]

1 голос
/ 05 мая 2019

Я предполагаю, что вы используете специальный адаптер с каким-то 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.
}

}

Надеюсь, это поможет, иначе, пожалуйста, дайте мне знать, что идет не так.

0 голосов
/ 04 мая 2019

Чтобы проверить положение видимого элемента, вы можете использовать

yourRecyclerView.getLayoutManager().findFirstVisibleItemPosition();

Здесь вы можете найти ссылку

Для более подробной информации вы можете проверить этот stackoverflowнить

0 голосов
/ 04 мая 2019

Это распространенная проблема переработчика. Я думаю, что вы найдете свой ответ здесь - Как использовать RecyclerView.scrollToPosition (), чтобы переместить позицию в верхнюю часть текущего представления?

...