fragmentとactivity間の情報伝達の2つの方法
2100 ワード
FragmentはActivityと同様にライフサイクルがあるため,一般的なbeanではなく構造関数を介して値を伝達し,異常をもたらす.
fragmentとactivityの間の情報伝達の2つの方法:
1、第一の方法で、最もよく使われる方法で、Bundleを使ってパラメータを伝達することです.
そしてFragmentのonCreatViewメソッドでは、getArgments()メソッドでbundleオブジェクトを取得し、getStringのkey値で私たちが渡した値を取得します.
2、第2の方法は、ホストActivityでメソッドを定義し、渡す値をFragmentに渡し、FragmentのonAttachメソッドでこの値を取得する
(1)fragmentに内部コールバックインタフェースを定義し、fragmentを含むactivityにコールバックインタフェースを実装させることで、fragmentはコールバックメソッドを呼び出してactivityにデータを渡すことができる.実はインタフェースコールバックの原理はすべて同じで、以前のブログでは、インタフェースコールバックはjavaの異なるオブジェクト間のデータ相互作用の共通の方法だと話していました.
(2)activity実装済みインタフェースはどのようにさっきのfragmentに伝わりますか?fragmentがactivityに追加されるとfragmentのメソッドonAttach()が呼び出されます.このメソッドでは、activityがOnArticleSelectedListenerインタフェースを実装しているかどうかを確認するのに適しています.チェックメソッドは、受信したactivityのインスタンスをタイプ変換し、fragmentで定義したインタフェースに値を付与することです.
(3)あるfragmentがactivityから剥離されるとonDetachメソッドが呼び出され,このとき伝達されたactivityオブジェクトを解放しなければactivityの破棄に影響し,不要なエラーが発生する.注意onAttachメソッドのコードを見て、付与する前にActivityでこのインタフェースが実装されているかどうかを判断し、instanceofを使用します.インタフェースが実装されていない場合は、例外を放出します.
fragmentとactivityの間の情報伝達の2つの方法:
1、第一の方法で、最もよく使われる方法で、Bundleを使ってパラメータを伝達することです.
MyFragment myFragment = new MyFragment();
Bundle bundle = new Bundle();
bundle.putString("DATA",values);// values
myFragment.setArguments(bundle);
そしてFragmentのonCreatViewメソッドでは、getArgments()メソッドでbundleオブジェクトを取得し、getStringのkey値で私たちが渡した値を取得します.
2、第2の方法は、ホストActivityでメソッドを定義し、渡す値をFragmentに渡し、FragmentのonAttachメソッドでこの値を取得する
// activity getTitles()
public String getTitles(){
return "hello";
}
//Fragment onAttach
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
titles = ((MainActivity) activity).getTitles();
}
// activity,
FragmentがActivityに値を渡す主なステップ:(1)fragmentに内部コールバックインタフェースを定義し、fragmentを含むactivityにコールバックインタフェースを実装させることで、fragmentはコールバックメソッドを呼び出してactivityにデータを渡すことができる.実はインタフェースコールバックの原理はすべて同じで、以前のブログでは、インタフェースコールバックはjavaの異なるオブジェクト間のデータ相互作用の共通の方法だと話していました.
(2)activity実装済みインタフェースはどのようにさっきのfragmentに伝わりますか?fragmentがactivityに追加されるとfragmentのメソッドonAttach()が呼び出されます.このメソッドでは、activityがOnArticleSelectedListenerインタフェースを実装しているかどうかを確認するのに適しています.チェックメソッドは、受信したactivityのインスタンスをタイプ変換し、fragmentで定義したインタフェースに値を付与することです.
(3)あるfragmentがactivityから剥離されるとonDetachメソッドが呼び出され,このとき伝達されたactivityオブジェクトを解放しなければactivityの破棄に影響し,不要なエラーが発生する.注意onAttachメソッドのコードを見て、付与する前にActivityでこのインタフェースが実装されているかどうかを判断し、instanceofを使用します.インタフェースが実装されていない場合は、例外を放出します.