2012-10-29 14 views

答えて

17

これは実際にFragmentsの公式のAndroidドキュメントに含まれています。親アクティビティのコンテキスト(Toast、Dialogなど)が必要な場合は、getActivity()とします。 Fragmentのインターフェイスでコールバックメソッドを呼び出す必要がある場合は、onAttach(...)でインスタンス化されたコールバック変数を使用する必要があります。

public static class FragmentA extends ListFragment { 
    ExampleFragmentCallbackInterface mListener; 
    ... 
    @Override 
    public void onAttach(Context context) { 
     super.onAttach(context); 
     try { 
      mListener = (ExampleFragmentCallbackInterface) context; 
     } catch (ClassCastException e) { 
      throw new ClassCastException(context.toString() + " must implement ExampleFragmentCallbackInterface "); 
     } 
    } 
    ... 
} 

Source

+0

これを実装するには、FragmentCallbackInterfaceを使用することをおすすめします。 –

+0

@James:getActivity()を使用するよりもこのアプローチが優れている理由を説明してください。場合によってはgetActivity()がnullを返し、アプリケーションがクラッシュすることがあります。上記の方法を使用することで、アプリがクラッシュしないことを確実にすることができますか?ありがとう。 – Rajat

+1

getActivity()がnullを返す場合、まだ接続されていないので、 'mListener'もnullになります。このアプローチは 'getActivity()'を使用するよりも優れています。なぜなら、あなたがアタッチされているアクティビティがフラグメント内のコンテンツを操作するために必要なインタフェースを実装していることを保証するからです。 –

8

getActivity()が最適です。ストアする変数を保持する必要はありません(常に、アプリサイクルまで!)。必要であれば、メソッドを呼び出して! :)

-2

あなたがフラグメントである場合は、)(getActivityを呼び出すことができます。または、フラグメント内にある場合は、getApplicationContext()。getContext();を呼び出すこともできます。ほとんどの場合、getActivity()は必要なすべてを行います。

関連する問題