1

У меня есть фрагмент, который заполняет экран RecyclerView (android:support:v7.widget.RecyclerView) и GridLayoutManager. Версия поддерживающей библиотеки: 23.0.0.RecyclerView GridLayoutManager прокручивается при вставке наверх

Предположим, у меня есть три элементов в строке. Когда я вставляю три новых элемента вверху, я ожидаю, что все опустится на одну строку. Если бы я был на самом верху, я бы ожидал, что все спустится на один ряд и увидит мои три новых предмета в первой строке. Вместо этого View остается на элементе. Новые элементы вставлены, но я должен прокрутить вверх, чтобы увидеть их. Я даже не узнал бы, что что-то изменилось, пока я не прокрутил.

Как я могу достичь того, что все движется вниз (то есть оно прокручивается или остается на одном и том же индексе (сдвигает)) на количество вставленных элементов?

Вот как вставить новые элементы:

myImageAdapter.notifyItemRangeInserted(0, batch.size()); 

Initialization:

final RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getActivity(), 1); 
grid = (RecyclerView) rootView.findViewById(R.id.grid); 
grid.setHasFixedSize(true) 
grid.setLayoutManager(layoutManager); 
grid.setAdapter(myImageAdapter); 

Мои myImageAdapter является дериват RecyclerView.Adapter<?>, но ничего особенного.

Надеюсь, это ясно, чего я пытаюсь достичь. Скажите, пожалуйста, если нет, и я создам графику для иллюстрации.

// дополнение от GridLayoutManager docs: «stackFromEnd не поддерживается GridLayoutManager». Похоже, я не могу это использовать.

ответ

0

Попробуйте это:

RecyclerView.LayoutManager 

public void scrollToPosition (int position) 

пример:

layoutManager.scrollToPosition(0); 

после добавления элементов.

+0

Вы думаете, я должен посчитать количество пунктов, которые я вставленные, следить за мою текущую позицию, а затем, после вставки, прокручивать вверх? Можете ли вы представить полный пример? – m02ph3u5

1

Вы можете использовать собственность scrollToPosition();

if(yourCurrentPosition < 3) 
    layoutManager.scrollToPosition(0); 
else 
    layoutManager.scrollToPosition(yourCurrentPosition - 3); 

В вашей деятельности/фрагменте можно использовать набор данных наблюдатель:

myImageAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { 
    @Override 
    public void onItemRangeChanged(int positionStart, int itemCount) { 
     super.onItemRangeChanged(positionStart, itemCount); 
     if(positionStart < 3) 
      layoutManager.scrollToPosition(0); 
     else 
      layoutManager.scrollToPosition(positionStart - 3); 
    } 
}); 
+0

Когда это можно назвать? Как мне отслеживать текущую позицию? Это скорее метод, чем свойство;) – m02ph3u5

+0

@ m02ph3u5 отредактировал –

+1

Хорошо, но как мне отслеживать текущую позицию? Или мне это не нужно? А что, если пользователь находится в прокрутке? – m02ph3u5

Смежные вопросы