每次重新启动后都会添加片段(Android)

时间:2020-10-02 10:45:25

标签: java android android-fragments android-activity android-lifecycle

每次重新启动活动时,我添加到FragmentManager的片段都会加倍,而不会破坏FragmentManager中的先前片段。 这是我的代码:

private FragmentManager fm = getSupportFragmentManager();

@Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);

fm.beginTransaction().add(R.id.main_container, fragment5, "5").hide(fragment5).commit();
fm.beginTransaction().add(R.id.main_container, fragment4, "4").hide(fragment4).commit();
fm.beginTransaction().add(R.id.main_container, fragment3, "3").hide(fragment3).commit();
fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
fm.beginTransaction().add(R.id.main_container, fragment1, "1").commit();
}

我知道,当片段中的方法被调用两次时,片段会被重复添加。但是要检查FragmentManager是否确实存在问题,我调用了getFragments方法

TextView someText = findViewById(R.id.text);
someText.setText(""+fm.getFragments());

,并将其设置为TextView,在最后一次事务之后。首次加载应用程序时,TextView为空。第二次,当我使用“应用更改并重新启动活动”时,TextView仅显示片段数组列表一次。但是片段会翻倍。 TextView第三次显示碎片数组列表两次,并使碎片增加三倍。
为什么会发生这种情况?难道我做错了什么?希望你会回答。问候。

2 个答案:

答案 0 :(得分:1)

尝试这些解决方案

  1. 在onCreate方法中的这些行之前初始化片段管理器。
  2. 尝试在backpress上弹出片段
  3. 不要一次添加所有fragmnet。仅在需要添加片段时添加片段。

答案 1 :(得分:0)

尝试这样更改它

private FragmentManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
fm = getSupportFragmentManager();


fm.beginTransaction().add(R.id.main_container, fragment5, "5").hide(fragment5).commit();
fm.beginTransaction().add(R.id.main_container, fragment4, "4").hide(fragment4).commit();
fm.beginTransaction().add(R.id.main_container, fragment3, "3").hide(fragment3).commit();
fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
fm.beginTransaction().add(R.id.main_container, fragment1, "1").commit();
}
相关问题