2015-10-29 2 views
-1

Я разрабатываю приложение для Android с фрагментами. Эти фрагменты - это списки предметов. Когда пользователь выбирает элемент, в стек добавляется новый фрагмент.Вызов методов фрагмента при очистке заднего стека

getActivity().getSupportFragmentManager().beginTransaction() 
    .add(R.id.frameContent, ListFragment.newInstance(TypeEnum.comunidades, 
            resultsvalue.get(position).getIdentificador(), 
            resultsvalue.get(position).getIdentificador(), 
            resultsvalue.get(position).getNombre())) 
            .addToBackStack(null).commit(); 

Пользователь имеет возможность вернуться назад (к предыдущему списку), но когда я вернусь к предыдущему фрагменту ни один метод не жизненного цикла называется. Когда я добавляю новый фрагмент, фрагмент ниже не выполняет onPause() или onStop(), поэтому, возвращаясь к фрагменту ниже вершины стека, у меня нет обратного вызова для запуска методов.

+0

... и вопрос есть? – bofredo

+0

Почему он не запускает какой-либо метод жизненного цикла, когда фрагмент возвращается в начало стека. –

ответ

2

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

В этом случае я считаю, что вы хотите использовать replace(), а не add(). Таким образом, замененный фрагмент будет проходить процесс уничтожения, вызывая как onPause/onStop.

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

FragmentManager fm = getSupportFragmentManager(); 
MainFragment f = (MainFragment) fm.findFragmentByTag("YOUR_TAG"); 
f.doSomething(); 

Вы можете указать тег при первом добавлении основного фрагмента в контейнер.

+0

И нельзя ли использовать «добавить», а когда фрагмент вернется в начало, выполните какой-либо метод? –

+0

С заменой(), когда вы вернетесь, вы можете просто поместить свой метод внутри onStart() или onResume(), и он будет вызван. Может, я не понял ваш вопрос. – natario

+0

Мне нужно изменить информацию в фрагменте, если пользователь вернется. И мне нужно использовать 'add', потому что я хочу, чтобы список находился в том же положении, что и до щелчка. –

0

Использовать replace() вместо add().

getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.frameContent, ListFragment.newInstance(TypeEnum.comunidades, resultsvalue.get(position).getIdentificador(), resultsvalue.get(position).getIdentificador(), resultsvalue.get(position).getNombre())).addToBackStack(null).commit(); 
+0

Мне нужно изменить информацию в фрагменте, если пользователь вернется. И мне нужно использовать 'add', потому что я хочу, чтобы список находился в том же положении, что и до щелчка. –