Fragment
2015/11/18 9:34:20
Fragment知识点总结
定义Fragment的方式
- 动态
- 静态
区别
- 在主布局文件中定义不同
主Activity必须继承FragmentActivity
静态:主布局文件里定义 一个fragment控件
动态:主布局文件里定义一个布局(用来装Fragment的容器),例如LinearLayout
应用
- 标题栏通常用静态定义、 内容通常用动态定义
动态:
- 创建一个xml布局文件,里面包含Fragment要显示的控件
创建一个java文件 继承Fragment(导入V4包),重写onCreateView方法
(所有控件都在这使用,MainActivity就用来调用Fragment),加载上述xml文件
最后返回view,而不是返回之前的布局Activity布局文件 创建一个LinearLayout,设置ID,用于装载Fragment,name属性是上述文件的路径名
MainActivity文件里
A.通过getSupportFragmentManager()方法获得一个FragmentManager
B.用manager对象 通过beginTransaction方法开启事务,返回FragmentTransaction对象
C.创建一个MyFragment对象 MyFragment mFragment= new MyFragment(); (必须判断是否为空)
D.利用事务对象 跟上述定义个布局加载该Fragment transaction.add(Activity里布局的id,Fragment对象)
E.提交事务 transaction.commit();
静态:
定义好java文件,然后在主布局文件里 创建fragment控件即可,name属性是该java文件的路径名
如何取得fragment里的控件?
- 在写好的java文件里 重写onActivityCreated
- 通过getActivity()方法获得上下文
2015/11/18 9:40:21
关于Fragment的回退栈
只要加入到回退栈就能回退,主显示Fragment不回退
addToBackTrack(null)事务的replace 会删除数据,若要保存上个Fragment的数据 ,先隐藏hide,再添加add
调用getFragmentManager.popBackStack()方法 可以返回上一个Fragment
2015/11/18 9:41:09
Fragment之间通信
通过getActivity()方法获取Fragment对应Activity里的控件的ID。
2015/11/18 9:41:32
Fragment 切换、嵌套则会报错
Duplicate id 0x7f0c0069, tag null, or parent id 0x0 with another fragment for gdpc.erintrus.bnj_project.TitleFoundFragment
解决方法:
onCreateView下面使用下列代码
if (view != null) {
ViewGroup parent = (ViewGroup) view.getParent();
if (parent != null)
parent.removeView(view);
}else{
//数据初始化
view = inflater(R.layout.xx,container,false);
}
return view;
2015/11/18 9:43:31
Activity传值给Fragment
方法一
- 在Activity中定义一个字段,生成get、set方法
在Fragment中通过get方法获取
private String mTitle; public String getmTitle() { return mTitle; } public void setmTitle(String title) { this.mTitle = title; } ((DemoActivity)getActivity()).getmTitle();
方法二
- 通过构造函数传递值
2015/11/18 9:46:37
Activity与 ViewPager 里Fragment的交互
- 在创建Fragment的Adapter里 获取该Fragment的控件
- 通过Fragment实例的getView和findViewById获取控件
TextView tv = (TextView) introductionFragment.getView().findViewById(R.id.tvIntroductionContent);
tv.setText(schoolBasicInfo.getIntroduct());
.参考TrainingAgencyAdapter