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传递消息。




0 0
原创粉丝点击