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() + "
从Fragment1收到数据!");
	}

  三、源码下载

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

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

原文地址:https://www.cnblogs.com/klcf0220/p/3949880.html