初探碎片

解决android studio中使用碎片后,平板预览出错问题

预览出错预览出错
解决办法:
在左右fragment各加tools:layout="@layout/left_fragment"

问题地址,点进去后记得顶这个问题!
显示正常了:
显示显示

其中,使用碎片的顺序应该是,写的方向则相反:

1
fragment->碎片类: 调用该类
碎片类->布局: 加载该布局

动态添加碎片

1
2
3
4
5
6
7
8
9
10
//新建碎片类实例
anotherFragment anotherFragment = new anotherFragment();
//碎片管理器
android.app.FragmentManager fragmentManager = getFragmentManager();
//用碎片管理器开启事务
FragmentTransaction transaction = fragmentManager.beginTransaction();
//替换前者容器中的碎片实例,从这里可以看出,在布局文件<fragment name="...">,实际上是创建了该碎片类的实例
transaction.replace(R.id.right_container,anotherFragment);
//提交事务
transaction.commit();

动态添加碎片实则是在一个容器中(此例为FrameLayout)将一个碎片(实例)替换成另一个碎片(实例)

在碎片中模拟返回栈

在事务(transaction)被commit前,添加transaction.addToBackStack(null),按Back键可以返回事务前的状态

从布局文件获取碎片实例,接着就可以调用碎片的方法:

1
LeftFragment leftfrag = (LeftFragment) getFragmentManager().findFragmentById(R.id.left_frag);

碎片中调用活动的方法:
因为:活动)(1)<–绑定–>布局<–包含–>碎片->对应碎片类->在碎片类里面通过getActivity()获取相关联活动(1)

碎片的生命周期

  • 若有在事务提交前 addToBackStack,那么起初的碎片会onPause->onStop->onDestroyView,按Back键会重新加载该碎片 onActivityCreated->onStart->onResume(没有onCreateView,原因是借助addToBackStack使得先前碎片的实例和视图得以保存)
  • 反之,在碎片被替换后,onDestroyView->onDestroy->onDetach

preview无法显示

previewpreview

问题的解答

大致意思是,只要你代码写的对,真实运行的是时候就不会出错,忽略这个问题即可。我想会不会和上面的那个问题有关,加上tools:layout="@layout/left_fragment"果然正确显示出来了

其实,可以推理出,tools:layout="@layout/left_fragment"不过是用了来自xmlns:tools="http://schemas.android.com/tools"的工具,你不加,无非无法预览而已,该运行的还是运行起走

原文地址:https://www.cnblogs.com/gabygoole/p/5299861.html