fragmentとactivity間の情報伝達の2つの方法

2100 ワード

FragmentはActivityと同様にライフサイクルがあるため,一般的なbeanではなく構造関数を介して値を伝達し,異常をもたらす.
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を使用します.インタフェースが実装されていない場合は、例外を放出します.