清除后端堆栈时调用片段上的方法

时间:2015-10-29 10:04:43

标签: android android-fragments fragment

我正在使用片段开发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(),所以当回到堆栈顶部下方的片段时,我没有回调来运行方法。

2 个答案:

答案 0 :(得分:2)

正如我理解你的问题,你说的是回到主片段时,它有点没有被初始化,因为它之前没有被破坏。

在这种情况下,我认为您要使用replace()而不是add()。这样,被替换的片段将经历销毁过程,同时调用onPause / onStop。

对仍然活着的片段调用方法可以按如下方式进行:

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

首次将主片段添加到容器时,可以指定标记。

答案 1 :(得分: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();