美文网首页
Android Training - Fragment Comm

Android Training - Fragment Comm

作者: Jaspermere | 来源:发表于2017-11-22 21:10 被阅读0次

    我学到的一些东西

    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 Comm

          本文链接:https://www.haomeiwen.com/subject/dfbovxtx.html