最近私は断片を多く使っていましたが、フラグメントの親アクティビティへの参照を使用するのがベストプラクティスであるかどうか不思議でした。 onActivityCreatedコールバックでgetActivity()を呼び出すか、parentActivity変数を初期化したほうがよいでしょうか。フラグメントの親アクティビティーを参照するベストプラクティス?
12
A
答えて
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 ");
}
}
...
}
8
getActivity()が最適です。ストアする変数を保持する必要はありません(常に、アプリサイクルまで!)。必要であれば、メソッドを呼び出して! :)
-2
あなたがフラグメントである場合は、)(getActivityを呼び出すことができます。または、フラグメント内にある場合は、getApplicationContext()。getContext();を呼び出すこともできます。ほとんどの場合、getActivity()は必要なすべてを行います。
関連する問題
- 1. ベストプラクティス:フラグメント間のアンドロイドデータベース参照の管理
- 2. プロジェクトを参照するベストプラクティス
- 3. 子フラグメントへの参照を取得する親フラグメントを再作成した後のフラグメント
- 4. ViewPager内でフラグメントを参照する
- 5. ライブラリーからアクティビティーの参照を検索し、アクティビティーを終了(終了)する方法は?
- 6. UserControlで親のResourceDictionaryを参照する
- 7. Gridview templatefieldの親ロー参照?
- 8. 参照親ウィンドウのFCKeditorAPI(2.0)
- 9. 参照親ウィンドウのドキュメント
- 10. アクティビティからのフラグメントの参照
- 11. ココアで親を参照する
- 12. アダプターのアクティビティー・コンテキストをフラグメントから取得する
- 13. フラグメント内のLocationManagerへの参照を取得する方法
- 14. Androidユニットのテスト - コードがアンドロイドクラスを参照するときのベストプラクティス
- 15. .netのクラスライブラリプロジェクトから設定を参照するためのベストプラクティス
- 16. XSDの親ノードへの参照?
- 17. AS3クラス内の親MXMLへの参照?
- 18. C++/CLIで定数参照を実装するためのベストプラクティス
- 19. 親ディレクトリ参照を持つgetResource
- 20. タグの親への参照を取得する方法は?
- 21. aureliaのリピート親インデックスへの参照を取得するには?
- 22. 親コンポーネント内の子コンポーネントへの参照を取得する
- 23. ループ内の動的親要素の子を参照する
- 24. Maven:親POMの子プロジェクトのビルドディレクトリを参照する方法は?
- 25. Androidの内部クラス - 親への参照を変更する
- 26. 子フラグメントからの親フラグメントの更新
- 27. Maven:親pomプロジェクトへの参照を追加する
- 28. SSASで親子参照を作成する際の問題
- 29. オブジェクトのインライン作成で親を参照する方法は?
- 30. JavaのArraylistから親Arraylistを参照する
これを実装するには、FragmentCallbackInterfaceを使用することをおすすめします。 –
@James:getActivity()を使用するよりもこのアプローチが優れている理由を説明してください。場合によってはgetActivity()がnullを返し、アプリケーションがクラッシュすることがあります。上記の方法を使用することで、アプリがクラッシュしないことを確実にすることができますか?ありがとう。 – Rajat
getActivity()がnullを返す場合、まだ接続されていないので、 'mListener'もnullになります。このアプローチは 'getActivity()'を使用するよりも優れています。なぜなら、あなたがアタッチされているアクティビティがフラグメント内のコンテンツを操作するために必要なインタフェースを実装していることを保証するからです。 –