尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。
Fragment可以调用getActivity()方法很容易的得到它所在的activity的对象,然后就可以查找activity中的控件们(findViewById())。例如:
ViewlistView =getActivity().findViewById(R.id.list);
同样的,activity也可以通过FragmentManager的方法查找它所包含的frament们。例如:
ExampleFragment fragment =(ExampleFragment)getFragmentManager().findFragmentById(R.id.example_fragment
之所以会看不懂是官方Training忽略了很多代码,现在将官方的代码流程整理一下
首先需要理解的是,官方代码在做一个新闻客户端,就是左边是新闻标题,点击之后右边显示新闻内容 (或者你能理解的话,理解成网易新闻客户端那种也没问题)
准备工作
Activity显示HeadlinesFragment (就是有内部接口的那一个Fragment) <--官方文档没说明过,也没写出来
↓
显示时自动调用onAttach,如果Activity实现了内部接口,就通过向下转型,获得实现后的接口传给mCallback
(ps:onAttach的形参activity就是显示Fragment的父activity)
上面这些只是准备步骤,下面是实际操作
当用户点击了HeadlinesFragment的项目时,会自动调用onItemSelect(),我们这时候想看到的当然是出现新闻内容(新建一个Fragment显示内容),但是因为Fragment之间是不能直接进行通信的,那么这里就调用mCallback.onAriticleSelected()方法(由于上面的准备工作,mCallback已经指向了Activity实现的接口咯),让Activity去启动一个Fragment (所以要做什么都写在这个接口方法里)
就是说:
参考源码 (这个源码做了进一步简化,使用按钮代替onItenSelect())
http://download.csdn.net/detail/fulvaz/7930563
----------------------
这时候再回去看一遍Training的内容,是不是觉得好理解了很多呢?