1、Fragment布局引入
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// 将布局文件转换为View对象,然后返回
View view = inflater.inflate(R.layout.fragment, null);
//一定return view对象
return view;
}2、Activity中引入Fragment:在activity布局中引入,一定要有id或者android:tag属性
<fragment
android:id="@+id/fg_a"
android:name="包名.类名"
android:layout_height="wrap_content"
android:layout_width="match_parent"
/>
3、最常用,代码方式
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/fl_content"
></FrameLayout>//1. 获取fragmentManager
FragmentManager fragmentManager = getSupportFragmentManager();
//2. 通过fragmentManager获取FragmentTransaction
FragmentTransaction transaction = fragmentManager.beginTransaction();
//3. 通过new的方式创建一个Fragment对象
Fragment fragment = new Fragment();
// 4. 通过transaction的add方法将fragment添加到MainActivity的布局中的FrameLayout控件中
//参数1:ViewGroup控件的id 参数2:要添加的Fragment
transaction.add(R.id.fl_content, fragment);
//5. 提交事务
transaction.commit();
//简写成链式编程
//getSupportFragmentManager().beginTransaction().add(R.id.fl_content, fragment).commit();
4、Fragment的兼容
Fragment是Android 3.0 (API level 11),如果想向下兼容,要做到以下几点:
如果Activity要使用Fragment,那么必须让该Activity继承FragmentActivity;
让所有的Fragment类都继承android.support.v4.app.Fragment类,而不是android.app.Fragment;
将getFragmentManager替换成getSupportFragmentManager();
将android.app.FragmentTransaction换成android.support.v4.app.FragmentTransaction;
5、Fragment生命周期
6、Fragment的切换同一个Fragment只能添加一次。
通过replace方法,保证布局中只有一个Fragment存在。每次都会全部销毁,然后完全的重新创建。
getSupportFragmentManager().beginTransaction().replace(R.id.fl_content,fragment).commit();
通过add之后,然后通过hide隐藏和show显示的形式。完全不影响Fragment的生命周期。
初始化:
fragmentA = new FragmentA();
fragmentB = new FragmentB();
fragmentC = new FragmentC();
/*
* 将所有的Fragment添加到帧布局中
*/
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fl_content, fragmentA)
.add(R.id.fl_content, fragmentB)
.add(R.id.fl_content, fragmentC)
.show(fragmentA)//显示
.hide(fragmentB)//隐藏
.hide(fragmentC)
.commit();展示某个Fragment
getSupportFragmentManager().beginTransaction()
.show(fragmentA)
.hide(fragmentB)
.hide(fragmentC)
.commit();填坑:transaction生成成员变量去使用,报错:重复提交
7、Fragment之间调用
在Fragment中获取Context的子类
//运行时,返回的Activity正是该Fragment嵌套进去的Activity的对象
FragmentActivity activity = getActivity();同一个Activity中Fragment方法调用
在Activity中给Fragment添加tag
getSupportFragmentManager().beginTransaction()
//参数1:ViewGroup的id
//参数2:Fragment
//参数3:给Fragment设置一个tag标签,方便与我们以后将该Fragment查找出来
.add(R.id.fl_a, fragmentA, "fragmentA")
.add(R.id.fl_b, fragmentB,"fragmentB")
.commit();在FragmentA中调用FragmentB的方法
//在FragmentA中获取到FragmentManger
FragmentManager fragmentManager = getFragmentManager();
//通过tag标签获取到目标FragmentB
FragmentB fragmentB = (FragmentB) fragmentManager.findFragmentByTag("fragmentB");
//调用目标Fragment身上的方法
fragmentB.方法名;
本文详细介绍了Fragment在Android开发中的使用方法,包括布局引入、代码添加、兼容处理、生命周期管理及Fragment间的切换与调用等关键操作。
3157

被折叠的 条评论
为什么被折叠?



