我正在使用片段开发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 :(得分: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();