Fragment总结

第一次学习fragment是从第一行代码这本书里面看的,讲的很详细,首先回忆下

Fragment常见问题

1.怎么构建一个Fragment?
继承Fragment,并重写其生命周期方法,至于fragment视图。就是
onCreateView里面,return一个view就可以了。

2.怎么使用Fragment呢
两种使用方法,一是静态添加,即在xml文件里面直接写,

<fragment
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.xx.xx"
....

在android:name这个属性写上你Fragment的包名即可

第二种方法就是动态添加,首先拿到FragmentManager和接着就是拿到transaction,。用replace方法,然后commit后就可以了,这个动态改变Fragment常见用在导航栏碎片替换,我有一篇就是写导航栏的~是一种简单的实现方法,这里是直接贴上第一行代码里面的历程,没有源码的可以直接百度搜第一行代码源码

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.
beginTransaction();
transaction.replace(R.id.right_layout, fragment);
transaction.commit();

说道添加碎片,和替代碎片,为了提高效率我可以使用hide和show方法来隐藏和显示,就和view的visible和invisible一样的道理。也可以防止碎片数据丢失

3.Fragment的生命周期:生命周期是必不可少的,回忆下Fragment生命周期那张图这里写图片描述
那么先来讲下几个生命周期方法
(1)void onAttach (Context context)当Fragment第一次关联的时候调用,先说下,这里有个坑,就是这个方法在api<23是不会调用的,小于23要用onAttach(Activity activity),那么什么时候才算的上的关联呢
(2)View onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 这个方法是用来返回Fragment的view的,一般代码如下

public View onCreateView(LayoutInflater inflater,ViewGroup container Bundle savedInstance){
    View v=inflater(R.layout.xxx,container,false)//false表示不与父布局相关
    return v;
}

第二个参数呢是父布局,我暂时还有有用过他不为空的情况,而saveInstance如果不为空说明他可以用来恢复Fragment之前的数据
这里顺便说下,infalter 的父布局的问题?,第二个参数和第三个参数分别在加载布局时有什么用
没有父布局的限制可能出现宽高异常,会调用默认的配置,match_parent,如果还有viewGroup还添加会出现IllegalStateException

4.频换切换Fragment可以用返回栈来维护,调用commit之前,使用方法addToBackStack()可以添加到返回栈中,如果没有调用这个方法,一旦commit,fragment就会被销毁,它类似于Activity的返回栈,如果推进返回栈,用户再按返回键是可以返回这个Fragment,就不用再新建一个Fragment

5.与Activity的交互,既然Fragment寄生于Activity中,和Activity通信往往是不可避免的,或者是Fragment之间通信,有4中方式,其他主要是接口和广播可能常见一些,下面的是我网上找到,讲的很详细
fragment和Activity和另外fragment4中通信方式

6.Fragment常用的子类,主要3个ListFragment,DialogFragment,PreferenceFragment,
首先是ListFragment ,他是封装了listView,设置适配器的时候直接用ListFragment.setListAdapter()这个方法,他封装的只是简单的listView,如果希望丰富ListFragment的布局,可以在 onCreateView(LayoutInflater, ViewGroup, Bundle).中返回一个你自己定义的view,但是必须要有listView,且id为@id/android:list.如果要修改listview里面的具体布局则是在adapter里面设置,和listView用法是一样的,

接下来就是DialogFragment,这个类管理着dialog的生命周期,这样可以应对旋转屏幕dialog会报错情况,可以通过两种方式返回自己创建的dialog。在onCreateView或者onCrateDialog返回你要的布局就而已,下面这篇博客讲的很详细,主要的好处(1)可以让系统去管理声明周期,转动屏幕不需要再进行特殊处理(2)将Dialog逻辑从Activity里面抽出来
Android 必知必会 - DialogFragment 使用总结

7.fragment的重影?
使用 Fragment 的状态保存,当系统内存不足,Fragment 的宿主 Activity 回收的时候,Fragment 的实例并没有随之被回收。Activity 被系统回收时,会主动调用 onSaveInstance() 方法来保存视图层(View Hierarchy),所以当 Activity 通过导航再次被重建时,之前被实例化过的 Fragment 依然会出现在 Activity 中,此时的 FragmentTransaction 中的相当于又再次 add 了 fragment 进去的,hide()和show()方法对之前保存的fragment已经失效了。综上这些因素导致了多个Fragment重叠在一起

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要清空Fragment,可以使用FragmentManager的方法removeAllFragments()来实现。首先,获取FragmentManager的实例,可以使用getFragmentManager()或者getChildFragmentManager(),取决于你是在Activity还是在Fragment中操作。 在Activity中获取FragmentManager的实例,可以使用以下代码: FragmentManager fragmentManager = getFragmentManager(); 在Fragment中获取FragmentManager的实例,可以使用以下代码: FragmentManager fragmentManager = getChildFragmentManager(); 一旦获取了FragmentManager的实例,就可以调用removeAllFragments()方法来清空所有的Fragment。代码如下: fragmentManager.removeAllFragments(); 这样就能清空所有的Fragment了。同时,如果你只想清空指定的Fragment,可以使用remove()方法来移除指定的Fragment。例如,如果你有一个名为"myFragment"的Fragment,可以使用以下代码来清空它: fragmentManager.beginTransaction().remove(myFragment).commit(); 请注意,以上方法都是在Android API level 26及以上版本可用。如果你的项目的最低API level低于26,你可以考虑使用其他方法来清空Fragment,比如使用replace()方法将一个空的Fragment替换掉原有的Fragment总结起来,要在Android中清空Fragment,可以按照以下步骤进行操作: 1. 获取FragmentManager的实例,可以使用getFragmentManager()或者getChildFragmentManager()方法。 2. 使用removeAllFragments()方法清空所有Fragment,或者使用remove()方法移除指定的Fragment。 3. 如果需要,可以使用replace()方法将一个空的Fragment替换掉原有的Fragment。 :FragmentManager fragmentManager = getFragmentManager(); :FragmentManager fragmentManager = getFragmentManager(); :Android ViewPager&plus;Fragment 在Activity中获取Fragment的控件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值