2011-11-27 9 views
14

フラグメント+ RoboGuiceの使用例が見つかりました。この問題は、Androidフラグメントトランザクションマネージャを使用してフラグメントを追加/削除しようとしたときに発生します。フラグメントがRoboFragmentから継承するように指示すると、トランザクションマネージャはクラスが断片であるとはもはや考えません(RoboFragmentが拡張されているため)。ただし、RoboGuice独自のフラグメントマネージャを使用することもできますが、クラッシュすることもあります。 RoboGuiceフラグメントを動的に追加/削除する例はありますか?roboguiceとandroidの断片を使った簡単な例はありますか?

+0

RoboGuiceとFragmentsはアプリでうまく動作しています。問題の内容を確認できるようにスタックトレースを提供できますか? –

+0

また、どのバージョンの互換性ライブラリを使用していますか? –

+0

私はそれも働いている。 –

答えて

0

Roboguice 1.xは、互換ライブラリおよびフラグメントと互換性がありません。ベータ版の2.0を移動するか、Fragment *クラスを自分自身で拡張する必要があります。私は最近、新しいプロジェクトに断片を使用し始めました、そして次は私が継承していないよ

を使用しているコードです

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

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も実装しました。

私のアクティビティでは、compatibility packageを使用しているため、私はFragmentActivityを拡張しています。プレAPIレベル11との互換性を望む場合は、FragmentActivityを使用する必要があります。11をサポートしているだけの場合は、互換性ライブラリが必要ないか、FragementActivityを使用する必要はありません。私の活動では、次に私のページにフラグメントを追加するために次のものを使用しています。

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.add(R.id.fragmentHolder, new MyFragment()); 
transaction.commit(); 

R.id.fragmentHolderのタイプはFrameLayoutです。

これですべてうまく動作し、私のすべての注入リソースとビューを自分のフラグメントに使用することができます。完全性のために、最新の2.0-SNAPSHOTのroboguiceを、Android 2.2.1に対してcompatibity-v4ライブラリのr6バージョンとともに使用しています。

+0

ありがとうございます。あなたが見つけたか、実際に意味のあることをしているフラグメントを利用できるようにするコードはありますか? – danb

+1

私はそうは思わないけど、断片の中のアクティビティでできることは何でもできるはずです。唯一の違う部分は、あるFragmentから別のFragmentに直接通信しないでデータを渡すことです。 私はこのアプローチを見てきましたが、これはonCreate()のgetActivity()の型をチェックし、フラグメントからのデータを受け入れるために作成したインタフェースを確認することです。このように、アクティビティはこのインタフェースを実装し、必要に応じて次のフラグメントにデータを渡すことができます。 – Kingamajick

+0

これは本当ですか? Roboguice 2.0で試してみると、IllegalArgumentExceptionが発生します:MyFragmentActivityがRoboGuiceコンテキスト(instanceof RoboContext)ではないと表示されます。 –

関連する問題