Fragment的使用总结

本文详细介绍了Fragment在Android开发中的使用方法,包括布局引入、代码添加、兼容处理、生命周期管理及Fragment间的切换与调用等关键操作。

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.方法名;




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值