2017-03-30 3 views
1

私のアプリケーション(com.firebase.uiおよびcom.firebase.ui.authを使用する)を古いAPIレベル15(4.0 4)装置。最初に私はマニフェストタグを使用します。OnFragmentInteractionListenerをonAttach(コンテキストコンテキスト)なしで初期化する方法

<uses-sdk tools:overrideLibrary="com.firebase.ui, com.firebase.ui.auth"/> 

をその後私は古いデバイス上ONATTACH(コンテキスト...)メソッドが呼び出さなっていなかったことがわかりました。
だから私はそれについていくつかの記事を読んで、これは私が読んだものに基づいて思い付いたものです:

@SuppressWarnings("deprecation") 
    @Override 
    public void onAttach(Activity activity) { 

     Log.d(TAG, "onAttach Activity 1A " ); 
     super.onAttach(activity); 
     if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
      setmListener(activity); 
     } 

    } 

    private void setmListener(Context context){ 
     Log.d(TAG, "setmListener 1 " ); 
     if (context instanceof OnFragmentInteractionListener) { 
      mListener = (OnFragmentInteractionListener) context; 
     } else { 
      throw new RuntimeException(context.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onAttach(Context context) { 
     Log.d(TAG, "onAttach Context 1 " ); 
     super.onAttach(context); 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 

      setmListener(context); 
     } 
    } 

コードは古いAPI 15デバイス上で実行するとONATTACH(コンテキストコンテキスト)メソッドを取得していませんonAttach(アクティビティアクティビティ)メソッドと呼ばれます(Lollipopを実行するエミュレータでも同じです)。

D/StSt_MaxWListFrag: onAttach Activity 1A 
D/StSt_MaxWListFrag: setmListener 1 

しかし、両方の方法を実行したが、予想通りsetmListenerは一度だけ呼び出さMと、デバイス上の

D/StSt_MaxWListFrag: onAttach Context 1 
D/StSt_MaxWListFrag: onAttach Activity 1A 
D/StSt_MaxWListFrag: setmListener 1 

そうは - これまでのところ、それは何の問題もなく、これまで、動作しているようです。私はここに欠けているものがあるかどうか疑問に思っています。このアプローチは頭痛の原因になるのでしょうか、それとも悪い習慣ですか? ありがとうございました!

答えて

0

docsに見られるように、onAttach(Activity)はAPI23以降では廃止されていますが、代わりにonAttach(Context)が使用されています。 onAttach(Activity)は自動的に新しいonAttach(Context)を呼び出しません。だから、

、APIのすべてのバージョンをサポートするために、一度だけ装着するアクションを実行するためには、あなたが機能でロジックを添付して、チェックを実行する両方のコールバックからその関数を呼び出す分離することがあります。

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    attached(); 
} 

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 
     attached(); 
    } 
} 
+0

Isnと」私は何をしましたか?あなたは何も見逃していないと言っていますか?あなたのコードは、-if-ステートメントが1つのみのクリーナーです。 –

+0

はい、あなたの考えを確認しました。 – azizbekian

関連する問題