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