首先明确一点的就是,fragment是跟着activity的(依附),同时也要熟悉它的生命周期,才能通过其回调的方法去进行设计。
1、activity如何使用fragment?
① 在主layout先设置好一个layout,并设置好id,相当于占位符一样
② 设置好fragment的布局后,就设置一个继承Fragment类的对象与布局相匹配:
③ 接下来就是使用fragment了:
在MainActivity去调用:代码如下,具体的就自行修改即可
fragmentManager = getFragmentManager(); //得到Fragment 管理器对象
fragmentTransaction = fragmentManager.beginTransaction(); //开始fragmnet 的事务处理
fragment = new ScheduleFragment(); //实例化 fragment
fragmentTransaction.add(R.id.scheduleLayout, fragment,“fragment”+IDFORFRAGMENT); //fragment_id 是布局中给fragment 占位置的控,设置tag方便后面重建
fragmentTransaction.commit(); //提交事务
④ 此时fragment对象则会调用onCreateView ( ) ,当结束之后则会调用onActivityCreated ( ),这个时候你想在里面干什么就可以干什么啦~~~~亲测表示可以多次调用,只需要生成即可
2、可以撤销或者销毁fragment吗?
答案当然是肯定的,我发现只要我们能够想到的安卓都已经有对应的方式了,太智能了吧这点,以下是撤销fragment的 方式:
引用上文的代码:
fragmentTransaction.add(R.id.scheduleLayout, fragment,"fragment"+IDFORFRAGMENT);
//此处的tag就是一个标识,设置好之后,就可以根据其对应的tag进行撤销:
fragmentTransaction = fragmentManager.beginTransaction(); //开始fragmnet 的事务处理
// 撤销之前的fragment,再次进入定是重构
Log.e("test","上一个fragment"+(IDFORFRAGMENT-1));
Fragment fragment1 = fragmentManager.findFragmentByTag("fragment"+(IDFORFRAGMENT-1));
if (fragment1 != null) {
//开始事务 通过remove清除指定的fragment,并提交
fragmentManager.beginTransaction().remove(fragment1).commit();
}
3、fragment与activity的数据传输:
在mainactivity调用处:
//初始化一个 fragment
fragment = new ScheduleFragment(); //实例化 fragment
//activity与fragment之间可以传递数据
Bundle bundle=new Bundle();//然而bundle所能接收的数据类型有限,不包括Map、List等集合类型,所以要传递这些类型就得另辟蹊径。
ArrayList mList = new ArrayList<>();
mList.addAll(lessonArrayList);
bundle.putParcelableArrayList(“lessonArrayList”,mList);
bundle.putParcelable(“le”,le);
bundle.putStringArray(“randomColor”,randomColor);
bundle.putStringArray(“randomColor1”,randomColor1);
fragment.setArguments(bundle);
在fragment对象使用:(不同类型数据都可以传输,基本类型直接使用对应方法即可,对于类对象需要实现序列化,具体就不在这里阐述,可自行查阅)
lessonArrayList =(ArrayList)getArguments().getSerializable(“lessonArrayList”);