0

У меня есть фрагмент списка.Android listfragment scrolls наверх

Когда пользователь нажимает на элемент списка, я заменяю фрагмент списка фрагментом новостей. Когда пользователь возвращается (используя addToBackStack), список прокручивается вверх.

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

это мой код, где я заменить фрагмент списка:

myFragment myFragment = new myFragment(); 

    myFragment.setArguments(bundle); 
       FragmentTransaction ft = getActivity().getSupportFragmentManager() 
         .beginTransaction(); 
       ft.replace(R.id.phone_container, myFragment); 
       ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
       ft.addToBackStack(null); 
       ft.commit(); 

Я пытался что-то вроде этого, но я не получаю никакого результата:

public void onResume() { 
    super.onResume(); 
    Log.i("log", "onResume()"); 

     setListAdapter(adapter); 
     if(index!=-1){ 
     this.getListView().setSelectionFromTop(index, top); 
     } 
} 

public void onPause() { 
    super.onPause(); 
    Log.i("log", "onPause()"); 
    try { 
     index = this.getListView().getFirstVisiblePosition(); 
     View v = this.getListView().getChildAt(0); 
     top = (v == null) ? 0 : v.getTop(); 
    } catch (Throwable t) { 
     t.printStackTrace(); 
    } 
} 
+0

Нет, это не дубликат. – DArkO

ответ

0

При удалении фрагмента из иерархии представлений вы фактически уничтожаете представление, но не фрагмент. поэтому, когда он снова присоединяется, он снова вызывает onCreateView. Вот почему ваш список снова прокручивается вверху.

Способ сохранения состояния хранит его в переменных экземпляра, а затем снова использует onCreateView для перехода к последней позиции по мере выполнения кода (после того, как адаптер заполнен курсом).

Это может быть полезно для более подробной информации. How can I maintain fragment state when added to the back stack?

+0

Может у меня есть код для этого, пожалуйста? :) –

+0

Я не могу написать конкретный код, который вам нужен. но его простой, вы уже сохраняете индекс в методе onResume. просто подождите, пока данные будут загружены в список адаптером, чтобы восстановить его, а не onResume(). изначально у вас будет индекс со значением 0. просто напишите его, как вы ожидаете, чтобы загрузить определенный индекс, поскольку экран появляется в первый раз. – DArkO

+0

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