FragmentとActivity通信

2867 ワード

FragmentとActivityの通信方式は以下の通りです。


一、初期化関数による提供


 1.Fragmentを動的に追加する過程で、ActivityでFragmentを通過します.setArguments()の方法はFragmentにデータを提供する.
 2.Fragmentでは、onAttach()関数でgetArguments()を呼び出してBundleオブジェクトを取得し、提供したデータを取得します.

二、コールバックインタフェースの作成


例えば、ニュース閲覧シナリオでは、ニュースタイトルを表示するための2つのFragmentがあります.もう1つはニュースの内容を表示するために使用されます.ニュースタイトルをクリックすると、ニュースの内容が別のFragmentに表示されます.次に、Fragment 1のbuttonを押すことで、Fragment 2にメッセージを伝えます.
まず、Fragment 1でコールバックインタフェースを作成し、Activityで彼の方法を書き換え、Fragment 2に情報を伝える(例を挙げると、他のFragmentにも伝えることができます).
 1.コールバックインタフェースを作成します.
public interface OnButtonClickListener {
		public void onButtonClicked();
	}

 2.ホストactivityがこのインタフェースを実装することを保証するために、fragment 1の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.コールバックメソッドを書き換え、Fragment 2にデータを渡します.
       @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