首页 > 代码库 > Fragment与Acitvity通信

Fragment与Acitvity通信

Fragment与Activity通信的方式如下:

  一、通过初始化函数提供

 1.在动态添加Fragment的过程中,我们在Activity中通过Fragment.setArguments()的方法为Fragment提供数据;

 2.在Fragment中,在onAttach()函数中通过调用getArguments()获得一个Bundle对象,从而获取我们提供的数据。

  二、创建回调接口

 比如说:新闻浏览情境下,共有两个Fragment,一个是用来显示新闻标题;另外一个用来显示新闻内容。当我们点击新闻标题的时候,新闻的内容就显示到另外一个Fragment当中了。下面我们就来通过按下Fragment1中的button来传递一个消息到Fragment2中。

 首先我们要做的是,在Fragment1中创建一个回调接口,并且在Activity中重写他的方法,传递信息给Fragment2(举一反三:我们也可以传递给其他的Fragment)。

 1.创建回调接口;

public interface OnButtonClickListener {		public void onButtonClicked();	}

 2.为了确保宿主activity实现这个接口,fragment1的onAttach() 方法中通过将传入的activity强制类型转换,实例化一个OnButtonClickListener对象;

       @Override	public void onAttach(Activity activity) {		Log.v(TAG, "Fragment1 onAttach");		Bundle args = getArguments();		if (null != args) {			// 在这里我们可以将从Acivity收到的数据保存起来,并且显示到Fragment当中。		try {			mListener = (OnButtonClickListener) activity;		} catch (ClassCastException e) {			throw new ClassCastException(activity.toString()					+ " must implement OnButtonClickListener");		}		super.onAttach(activity);	}

 3.注册Button的Click事件,并在事件中调用回调方法。

       @Override	public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {		Log.v(TAG, "Fragment1 onCreateView");		View view = inflater.inflate(R.layout.fragment1, container, false);		// 为button注册事件,并且调用回调接口,将信息返回给上层		view.findViewById(R.id.fragment1_btn).setOnClickListener(new OnClickListener() {			@Override			public void onClick(View v) {				mListener.onButtonClicked();			}		});		return view;	}

 然后,Activity的代码要实现:

 1.通过implements实现回调接口;

public class MainActivity extends FragmentActivity implements OnButtonClickListener{

 2.重写回调方法,然后向Fragment2传递数据。

       @Override	public void onButtonClicked() {		Log.i(TAG, "onButtonClicked");		TextView tv = (TextView) fragment2.getActivity().findViewById(R.id.fragment2_tv);		tv.setText(tv.getText() + "\n从Fragment1收到数据!");	}

  三、源码下载

参考链接:http://www.cnblogs.com/getherBlog/p/3949171.html

代码下载链接:http://www.apkbus.com/android-179360-1-1.html

Fragment与Acitvity通信