フラグメント + RoboGuice を使用した実際の例を見つけるのに問題があります。この問題は、Android フラグメント トランザクション マネージャーでフラグメントを追加/削除しようとすると発生します。フラグメントに RoboFragment から継承するように指示すると、トランザクション マネージャーはクラスがフラグメントであると認識しなくなります (RoboFragment を拡張するため)。ただし、RoboGuice 独自のフラグメント マネージャーを使用することはできますが、これもクラッシュします。RoboGuice フラグメントを動的に追加/削除する例はありますか?
2 に答える
最近、新しいプロジェクトでフラグメントの使用を開始しました。使用しているコードは次のとおりです。
私はRoboFragmentクラスから継承していませんが、onCreateメソッドとonViewCreatedメソッドに次の行を追加することで、まったく同じことを行っています。RoboFragmentからの継承は、同じように動作するはずです。実際、これはRoboFragmentのように見えます。
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RoboGuice.getInjector(getActivity()).injectMembersWithoutViews(this);
}
public void onViewCreated(final View view, final Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RoboGuice.getInjector(getActivity()).injectViewMembers(this);
// Do whatever with your injected views.
}
もちろん、onCreateViewも実装しました。
次に、互換性パッケージを使用しているので、アクティビティでFragmentActivityを拡張します。以前のAPIレベル11との互換性が必要な場合は、FragmentActivityを使用する必要があることに注意してください。11plusをサポートしているだけの場合は、互換性ライブラリやFragementActivityを使用する必要はありません。私のアクティビティでは、以下を使用してフラグメントをページに追加しています。
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.add(R.id.fragmentHolder, new MyFragment());
transaction.commit();
R.id.fragmentHolderのタイプはFrameLayoutです。
これですべてが正常に機能し、挿入されたすべてのリソースとビューをフラグメントで使用できます。完全を期すために、Android2.2.1に対するcompatibity-v4ライブラリのバージョンr6で最新の2.0-SNAPSHOTのroboguiceを使用しています。
Roboguice 1.xは、compatライブラリおよびフラグメントと互換性がありません。ベータ版の2.0を移動するか、Fragment*クラスを自分で拡張する必要があります。
詳細については、次のURLをご覧ください。
http://groups.google.com/group/roboguice/browse_thread/thread/2858bc10b83b6beb