我学到的一些东西
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具体要实现的功能的一种抽象
网友评论