14

フラグメント + RoboGuice を使用した実際の例を見つけるのに問題があります。この問題は、Android フラグメント トランザクション マネージャーでフラグメントを追加/削除しようとすると発生します。フラグメントに RoboFragment から継承するように指示すると、トランザクション マネージャーはクラスがフラグメントであると認識しなくなります (RoboFragment を拡張するため)。ただし、RoboGuice 独自のフラグメント マネージャーを使用することはできますが、これもクラッシュします。RoboGuice フラグメントを動的に追加/削除する例はありますか?

4

2 に答える 2

13

最近、新しいプロジェクトでフラグメントの使用を開始しました。使用しているコードは次のとおりです。

私は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を使用しています。

于 2012-01-20T11:27:38.023 に答える
0

Roboguice 1.xは、compatライブラリおよびフラグメントと互換性がありません。ベータ版の2.0を移動するか、Fragment*クラスを自分で拡張する必要があります。

詳細については、次のURLをご覧ください。

http://groups.google.com/group/roboguice/browse_thread/thread/2858bc10b83b6beb

于 2011-12-15T05:36:22.867 に答える