顺晟科技
2021-08-28 09:42:52
193
从别处引进
目前APP的主页面大多采用“单活动多片段”的形式。使用多个片段需要解决两个问题:
片段如何附加到活动
片段之间的切换
个问题可以通过FrameLayout来解决,FrameLayout可以作为Fragment的容器和Activity布局的一部分,从而连接Fragment和Activity。
重点是第二个问题,如果你切换片段。片段切换需要片段事务。接下来,我们将介绍FragmentTransaction的创建及其替换、添加、隐藏、显示等方法,并学习如何使用这些方法完成Fragment的切换。
碎片交易的创建和提交
首先是片段事务的创建:
FragmentManager FM=getSupportFragmentManager();
FragmentTransaction ft=FM . BeginIntrasaction();
创建后,FragmentTransaction可以执行相应的操作(替换、添加等)。),具体操作我们后面再讲。
最后,记得提交:
ft.commit();
注意:
确保在一个事务中通过同一个FragmentTransaction对象提交所有事务。
如果一个业务中的提交次数超过1次,那么Java。朗。将报告IllegalStateException :提交已调用异常,因此同一FragmentTransaction对象只能提交一次。
FragmentTransaction执行事务处理
FragmentTransaction主要调用这四种方法:替换、添加、隐藏、显示。它们的功能和区别如下:
方法表
操作说明注释
Replace首先移除(销毁)容器中先前存在的所有片段,然后添加要显示的片段(将重新执行其生命流程)。如果容器中已经存在与要添加的片段相同的实例(注意:相同是指同一个对象、同一个类但对象不同,例如两次新建,只会清除其他片段,不会再次添加相同的片段)
添加不会删除容器中以前存在的片段,但会继续添加片段1。如果同一对象被添加多次,它将报告一个错误
2.由于添加操作不会删除之前的片段,因此会导致多个片段重叠。要解决这个问题,可以使用hide来隐藏前面的片段
隐藏隐藏容器中的片段
显示显示隐藏的片段。隐藏和显示是配对的。当你想显示隐藏的片段A时,显示(A);对于其他片段,先隐藏它们,然后在以后想要显示它们时显示它们
实现切换片段
片段的切换可以通过上面介绍的几种方法来实现。有两种实现方式:
使用替换
添加、隐藏、显示一起使用
种方法相对简单,只需要替换你想显示的片段。例如,如果我想显示FragmentA,那么我会这样写:
ft.replace(R.id.container,FragmentA);
其中ft是上面创建的FragmentTransaction,R.id.container是FrameLayout的id。
这种方法的优点是使用方便,缺点是每次切换一个Fragment,就会重新执行Fragment的生命周期,影响性能。
不建议使用种方法,因为它会影响性能。
重点介绍第二种方法,需要添加、隐藏、显示,其步骤如下:
如果尚未创建要切换的片段,首先创建片段对象,并通过add方法将其添加到容器中
使用隐藏方法隐藏当前片段,然后使用显示方法显示要切换的片段
具体代码如下:
私有void changeFragment(片段显示片段){ 0
FragmentManager FM=getSupportFragmentManager();
FragmentTransaction ft=FM . BeginIntrasaction();
if(show fragment==null){ 0
show fragment=new show fragment();
ft.add(R.id.container,show fragment);
}
//mcurrrfragment存储当前显示的片段
if (mCurrFragment!=null){ 0
ft . hide(Mcurrfragment);
}
ft . show(show fragment);
mCurrFragment=showFragment
ft.commit();
}
这种方法的优点当然是可以提高性能,但也有Fragment可能重叠的缺点。例如,在多次切换片段后,您旋转屏幕,然后重新构建活动。您会发现重构的活动上有几个片段重叠(隐藏失败)。
对于解决方案,网上有很多文章,这里就不多说了。
02
2022-09
21
2022-06
04
2022-06
04
2022-06
03
2022-06
30
2022-05