Перезагрузка представления списка при обратном нажатии во фрагменте

У меня есть фрагмент XYZFragment, где я отображаю представление списка. В элементе Listview нажмите, чтобы заменить фрагмент следующим образом.

Fragment fragment=new XYZFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction ft= fragmentManager.beginTransaction();
ft.addToBackStack(null);
ft.replace(R.id.content_frame, fragment).commit();

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


person Mr Nice    schedule 05.05.2014    source источник
comment
затем перезагрузите свой listView в onResume() вашего фрагмента   -  person SilentKiller    schedule 05.05.2014
comment
Опубликуйте код, который вы написали для кнопки «Назад».   -  person Joel Fernandes    schedule 05.05.2014
comment
попробуйте это ft.add(R.id.content_frame,fragment).commit();   -  person Imran Betara    schedule 05.05.2014
comment
Привет, Imarn, если я добавлю фрагмент, то предыдущий список фрагментов также будет щелкнут в видимом фрагменте.   -  person Mr Nice    schedule 06.05.2014
comment
что именно произойдет, когда вы щелкнете элементы списка, кроме изменения фрагмента ??   -  person Rod_Algonquin    schedule 06.05.2014
comment
В элементе просмотра списка я загружаю другой фрагмент, заменяя старый, то есть content_frame. Но когда я возвращаюсь, нажимая кнопку «Назад», снова загружается список.   -  person Mr Nice    schedule 06.05.2014


Ответы (1)


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

создать стек таким образом, чтобы

private static Stack<Fragment> myFragStack;
myFragStack = new Stack<Fragment>();

//Загрузить фрагмент

public void loadFragment(Fragment fragment){
 FragmentManager fm = getSupportFragmentManager();
 FragmentTransaction ft = fm.beginTransaction();
 myFragStack.lastElement().onPause();
 ft.hide(myFragStack.lastElement());
 myFragStack.push(fragment);
}

// onBackPressed

public void onBackPressed() {
 FragmentManager fm = getSupportFragmentManager();
 FragmentTransaction ft = fm.beginTransaction();

 if (myFragStack.size() > 1) {
    ft.remove(myFragStack.pop());
    myFragStack.lastElement().onResume();
    ft.show(myFragStack.lastElement());
    ft.commit();
 }
}

Это пример кода. Вы можете изменить его в соответствии с вашими требованиями. ft.replace() полностью удалит представление и потеряет контекст, поэтому вы не сможете поддерживать состояние списка, но использование стеков, поддерживающих фрагменты с помощью hide-show, решит вашу проблему.

person Zeeshan Saiyed    schedule 06.05.2014