Android Training - Fragment Communication

我学到的一些东西

Training中就说明了Fragment模块化的意义,所以为了能够让独立的Fragment之间传递信息就需要让容纳他们的Activity通过实现接口的方式与各个Fragment通信。

在文档中使用的例子是存在一个HeadlineFragment(或许叫列表更适合)和ArticleFragment,在HeadlineFragment里面有不同的列表项,按下这个列表项会选择相应的文章到ArticleFragment中。

首先我们先来明确每个Fragment的任务:

HeadlineFragment :1.显示文章的类型信息,2.可以让用户点击,3.点击以后应该提供信息

ArticleFragment :1. 正确的显示文章

因为Headline是列表类型的Fragment所以实现点击只需实现 onListItemClick(),至于第三点便是使用Activity实现接口的方式,因为这个信息是需要提供给外界的,所以在这个Fragment中只需要定义这个传递信息的动作规范而不用实现 ,这样第三点可以描述成提供一个监听器监听这个要传递信息的方法,这样从设计上以保证了这个Fragment是独立的,并且可与外界交互。

为了保证Activity实现了这个传递信息的规范所以需要在onAttach()的时候为这个Activity实例化为这个监听:

public class HeadlinesFragment extends ListFragment {
    OnHeadlineSelectedListener mCallback;

    // Container Activity must implement this interface
    public interface OnHeadlineSelectedListener {
        public void onArticleSelected(int position);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);

        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnHeadlineSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnHeadlineSelectedListener");
        }
    }

    ...
}

收获:以后在设计各个Fragment的时候不能只将一些表面的属性(UI)考虑进去,还应该包含这个Fragment具体要实现的功能的一种抽象

你可能感兴趣的:(Android Training - Fragment Communication)