Fragment实现界面交互小实例<2>

        上一篇博文讲的是直接在layout中的xml文件中声明fragment,用android:name=""指明了在layout中药实例化的fragment类,当系统创建这个activity layout时,它实例化每一个在layout中声明的fragment,并调用每一个对应fragment类的onCreateView()方法,来获取每一个fragment的layout,系统将从fragment类返回的VIew直接插入到fragment元素所在的地方。

        第二种添加fragment的方法,使用FragmentManager将fragment添加到一个已存在的ViewGroup。只需要在指定一个放置fragment的ViewGroup,当activity运行的任何时候,都可以将fragment添加到activity layout。为了在activity中操作fragment的添加、删除、或替换一个fragment等,要用到FragmentTransaction。

        这种情况下,要再操作fragmeng布局文件中的组件,就不可以在MainActivity中直接用findViewById方法提取了(只有在main.xml文件中直接声明的fragment可以用),不然会报空指针错误,你可能会想到用inflater,效果是一样的,就是在MainActivity中要拿到该布局文件的View。

官网有这样一个小实例:

https://developer.android.com/training/basics/fragments/communicating.html

要实现这样的交互,步骤如下:

首先在RightFragment类中定义一个接口和一个接口里面的方法:

public interface MyListener{
		public void onViewItemClick(View v);
	}

 然后定义一个接口类的引用:MyListener listener;

在RightFragment的onAttach()方法中给listener这个引用赋个值,不然会出讨厌的nullpointerexception哦

@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		listener = (MyListener)activity;
	}

 在MainActivity类中实现MyListener这个接口,实现里面的方法,这样在RightFragment类中直接用

listener.onViewItemClick(view);将该类的view传过去,在MainActivity的实现方法函数中用v.findViewById(),就可以拿到任何RightFragment布局中的组件。

实现效果:



 附上源代码:

猜你喜欢

转载自aarongo.iteye.com/blog/1914396