每次重启后都会添加片段(Android)
Posted
技术标签:
【中文标题】每次重启后都会添加片段(Android)【英文标题】:Fragment gets added each time after restart (Android) 【发布时间】:2021-01-18 01:13:27 【问题描述】:每次我重新启动活动时,我添加到 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 第三次显示片段数组列表两次,片段增加三倍。 为什么会发生这种情况?难道我做错了什么?希望你能回答。问候。
【问题讨论】:
【参考方案1】:试试这些解决方案
-
在 onCreate 方法中的这些行之前初始化片段管理器。
尝试在后台弹出片段
不要一次添加所有碎片网。仅在需要添加片段时添加。
【讨论】:
但我没有将片段添加到后台堆栈。所以在背压上没有任何作用。我只是隐藏和显示片段。 fm = getSupportFragmentManager(); 尝试理解activity的生命周期,你就会明白。 对不起,结果和以前一样。【参考方案2】:试试这样改
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();
【讨论】:
谢谢你的回答,但我已经尝试过了,它的工作原理是一样的。我认为这是片段中的错误。我已经举报了,正在等待他们的回复。以上是关于每次重启后都会添加片段(Android)的主要内容,如果未能解决你的问题,请参考以下文章