Как сохранить прокручиваемую позицию представления Recycler во фрагменте при нажатии на спину из другого действия? - PullRequest
0 голосов
/ 08 июня 2018

Я видел ответ на этот вопрос относительно действия здесь сохранение позиции прокрутки в действии

Приведенное выше решение использует onSaveInstanceState () для действия.Но это оказывается бесполезным для меня с onSaveInstanceState () для фрагмента.Я использую ViewPager с фрагментами.

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Опции, которые вы можете использовать, - сохранить экземпляр вашего фрагмента, установив в вашем фрагменте onCreate() следующее:

setRetainInstance(true)

Это означает, что этот фрагмент сохранит свой экземпляр и все значения переменныхкоторые назначены на это.Это позволяет использовать эти значения, не возвращаясь к onSavedInstance.В общем, здесь вам нужно сохранить текущую позицию в переменной.

Имейте в виду, что, поскольку вы сохраняете экземпляр, вы должны быть внимательны при проверке при создании новых экземпляров, чтобыв конечном итоге несколько экземпляров, если вы не хотите.

0 голосов
/ 08 июня 2018

Я предполагаю, что вы используете recyclerView внутри фрагмента.Чтобы сохранить свою прокручиваемую позицию, вот что вы должны сделать:

  1. Объявите одну статическую переменную в вашей Activity ex.public static int currentVisiblePosition = 0; и объявите layoutManager в своем фрагменте RecyclerView.LayoutManager layoutManager;

  2. В OnPause () вашего фрагмента напишите

     @Override
        public void onPause() {
            super.onPause();
            try{
                MainActivity.currentVisiblePosition = ((LinearLayoutManager)layoutManager).findFirstCompletelyVisibleItemPosition();
            }
            catch (NullPointerException ne)
            {
                ne.printStackTrace();
            }
        }
    
  3. Когда вынажав кнопку назад и хочет показать последний показанный пункт recyclerView пользователю, что вы должны сделать, добавьте следующий код, где вы загружаете список

        if(MainActivity.currentVisiblePosition > 0)
                        {
                            ((LinearLayoutManager) layoutManager).scrollToPosition((int) MainActivity.currentVisiblePosition);
                            MainActivity.currentVisiblePosition = 0;
                        }
    

это покажетэлемент, который был там до перехода к следующему занятию или фрагменту.

Спасибо за чтение ... Happy Coding ... !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...