Fragment的使用
来源:互联网 发布:多线程编程java代码 编辑:程序博客网 时间:2024/05/01 14:11
1. 创建Fragment
如果的你的APP的最低API版本是11或以上,你不必使用Support Library,你可以直接使用API框架里面的Fragment,这节课主要是讲基于Support Library的API,Support Library有一个特殊的包名,有时候与平台版本的API名字有些轻微的不一样。
创建一个fragment,首先需要继承Fragment类,然后在关键的生命周期方法中插入你APP的逻辑,就像activity一样。其中一个区别是当你创建Fragment的时候,你必须重写onCreateView()回调方法来定义你的布局。事实上,这是使Fragment运行起来,唯一一个需要你重写的回调方法。
public class ArticleFragment extends Fragment { public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) { return inflater.inflate(R.layout.article_view, container, false); } }就像activity一样,当fragment从activity添加或者移除、当activity生命周期发生变化时,fragment应该是实现生命周期回调来管理它的状态。例如,当activity的onPause()被调用时,它里面的所有fragment的onPause()方法也会被触发。
2. 在Activity运行时添加Fragment
1)比起用<fragment>标签在activity的布局文件中定义fragments,就像上节课说的,你也可以在activity运行时动态添加fragment,如果你在打算在activity的生命周期内替换fragment,这是必须的。
2)为了执行fragment的增加或者移除操作,你必须用 FragmentManager 创建一个FragmentTransaction对象, FragmentTransaction提供了用来增加、移除、替换以及其它一些操作的APIs。
3)如果你的activity允许fragments移除或者替换,你应该在activity的onCreate()方法中添加初始化fragment(s).
4)运用fragment(特别是那些你在运行时添加的)的一个很重要的规则就是在布局中你必须有一个容器view,fragment的layout将会放在这个view里面。
在你的activity里面,用Support Library APIs调用 getSupportFragmentManager()方法获取FragmentManager 对象,然后调用beginTransaction() 方法创建一个FragmentTransaction对象,然后调用add()方法添加一个fragment.
你可以使用同一个 FragmentTransaction进行多次fragment事务。当你完成这些变化操作的时候,必须调用commit()方法。
3. Fragment替换
替换fragment的过程与添加过程类似,只需要将add()方法替换为 replace()方法。
记住当你执行fragment事务的时候,例如移除或者替换,你经常要适当地让用户可以向后导航与"撤销"这次改变。为了让用户向后导航fragment事务,必须在FragmentTransaction提交前调用addToBackStack()方法。
addToBackStack()方法提供了一个可选的String参数为事务指定了一个唯一的名字。这个名字不是必须的,除非你打算用FragmentManager.BackStackEntry APIs来进行一些高级的fragments操作。
4. Fragments之间的交互
定义一个接口
为了让fragment与activity交互,你可以在Fragment 类中定义一个接口,并且在activity中实现这个接口。Fragment在他们生命周期的onAttach()方法中捕获接口的实现,然后调用接口的方法来与Activity交互。
public class HeadlinesFragment extends ListFragment { OnHeadlineSelectedListener mCallback; public interface OnHeadlineSelectedListener { public void onArticleSelected(int position); } public void onAttach(Activity activity) { super.onAttach(activity); try { mCallback = (OnHeadlineSelectedListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnHeadlineSelectedListener"); } } ... }现在Fragment就可以通过调用OnHeadlineSelectedListener接口实例的mCallback中的onArticleSelected()(也可以是其它方法)方法与activity传递消息。
实现接口
为了接收回调事件,宿主activity必须实现在Fragment中定义的接口。
传消息给Fragment
宿主activity通过findFragmentById()方法来获取fragment的实例,然后直接调用Fragment的public方法来向fragment传递消息。
- ViewPage+Fragment的使用
- Fragment的使用
- Android Fragment的使用
- Android-Fragment的使用
- Android Fragment的使用
- Android Fragment的使用
- Android Fragment的使用
- Fragment的使用
- Android Fragment的使用
- Fragment的使用
- Fragment的简单使用
- Fragment的使用
- fragment的使用
- Android Fragment的使用
- android Fragment 的使用
- Fragment的使用
- Android Fragment的使用
- Android Fragment的使用
- oracle和mysql数据库创建表之前判断表是否存在,如果存在则删除已有表,以及在这两个库中创建表
- Linux库文件的搜索路径
- 基于jQuery的高可定制的瀑布布局实现
- python中除法 “/” 和 "//"的区别
- 安卓4.4录屏命令
- Fragment的使用
- java基本数据类型转换
- 第13周 项目1-数组大折腾(4)【删除是3的倍数的元素】
- 搭建高可用的MongoDB集群
- 车辆违章查询
- Photoshop脚本 > 反转当前选区
- Git的思想和基本工作原理
- JSON字符串转javabean-net.sf.ezmorph.bean.MorphDynaBean cannot be cast to java.util.Map
- Java线程池使用说明