Fragment常用内容回顾

动态添加fragment

动态添加碎片基本使用
private void replaceFragment(Fragment fragment){
    FragmentManager fragmentManager=getSupportFragmentManager();
    FragmentTransaction transaction=fragmentManager.beginTransaction();
    transaction.replace(R.id.right_layout,fragment);
    transaction.commit();
}

代码解释:
- 首先需要创建待添加的fragment实例,也就是方法中传递过来的参数。
- 获取FragmentManager,在活动中可以直接调用getSupportFragmentManager()方法得到
- 使用FragmentManager开启一个事务,使用beginTransaction()方法开启
- 向容器内容添加或替换碎片,这里使用replace()方法实现,需要传入容器的id和待添加的fragment。(注意这里的容器指的是要存放这个fragment实例的viewGroup)
- 提交事务,调用commit()方法来实现

使用事务向容器中添加实例的时候,repalce与add有什么区别?

在使用add()函数的时候,一般伴随着hide()或者show();
先说一下每个函数的概念:
- add():向活动中添加一个fragment,这个fragment在activity容器中有他自己的视图
- show():显示一个以前被隐藏的Fragment,前提是fragment已经添加到了活动中,显示fragment的view
- hide():隐藏一个已经存在的fragment,前提是fragment已经添加到了活动中,隐藏fragment的view
- replace():执行的是一个remove(Fragment)–>add()操作过程

共同点:
二者都可以解决Fragment直接切换时的闪动问题,
hide()方法仅仅是隐藏了Fragment的View,而没有销毁View,show()方法仅仅是显示之前隐藏的View。
replace是先移除再添加重新创建fragment
add是添加新的fragment

如何在Fragment中模拟返回栈,也就是从一个Fragment可以返回到另一个Fragment?

FragmentTracsaction中提供了一个addToBackStack()方法,用于将一个事务添加到返回栈中。

//上面代码commit之前添加
transaction.addToBackStack(null);

如果之前有一个fragment,这时候在按back按键,程序并不会直接退出,而是返回到上一个fragment。

Fragment中嵌套Fragment

开发过程中Fragment嵌套Fragment不显示问题(当时场景应用在嵌套的融云聊天列表Fragment):

原因是因为在获取FragmentManager实例的时候使用的getSupportFragmentManager,嵌套Fragment**一定要使用getChildFragmentManager**,谨记。

FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction();
        mConversationListFragment = initConversationList();
        fragmentTransaction.add(R.id.lin_fragment_chat, mConversationListFragment, "chat");
        fragmentTransaction.addToBackStack("chat");
        fragmentTransaction.commitAllowingStateLoss();

参考地址:https://www.cnblogs.com/genggeng/p/6780014.html

猜你喜欢

转载自blog.csdn.net/xgangzai/article/details/81486719