片段BackStack lyfecicle无法正常工作

问题描述 投票:0回答:1

我有一个片段活动,其中有一个片段A。片段A在onViewCreated方法中做了一些重要的事情:

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mission1 = view.findViewById(R.id.mission1);
    mission2 = view.findViewById(R.id.mission2);
    mission3a = view.findViewById(R.id.mission3a);
    mission3b = view.findViewById(R.id.mission3b);

    imageButtonList.add(mission1);
    imageButtonList.add(mission2);
    imageButtonList.add(mission3a);
    imageButtonList.add(mission3b);
    prepareButtons();
}

[好,现在,这个片段A,有一个创建新片段B的按钮,但是我想在新的片段B中添加一个“后退”按钮,所以我在启动片段B时将片段A添加到了后栈中。

FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
CampaignMissionFragment fragment = CampaignMissionFragment.newInstance(auxMission);
ft.replace(R.id.fragmentContainer, fragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();

并且在片段B中,我将此添加到后退按钮onClick():

getFragmentManager().popBackStack();

问题是,当我按回片段B时,正在调用片段A的onViewCreated方法,因此我的imageButtonList数组内部的按钮数量错误,因为再次插入了相同的按钮。

谁是解决此问题的正确方法?我认为Fragment的行为与Activity相似,在这里您可以解决此问题,将不想执行的代码放在onCreate中两次。但是在这种情况下,我无法执行此操作,因为该片段的onCreate方法中没有我的视图。

谢谢

android android-fragments android-fragmentactivity fragment-backstack fragment-lifecycle
1个回答
0
投票
您可以尝试在onDestroyView中清除imageButtonList,另一个解决方案是检查saveInstanceState是否不为null,然后在这种情况下避免将按钮添加到列表中。另外,onCreate()中没有与View相关的操作
© www.soinside.com 2019 - 2024. All rights reserved.