2012-04-28 8 views
1

Ice Cream Sandwich/Honeycombが登場する前に、開発者は、画面のUIのやりとりを処理するために、アクティビティを中心としたロジックの流れを工夫していました。私は、各タブがフラグメントアクティビティとして機能する組み合わせタブ/ビューページャを作成する作業に直面しています。フラグメントアクティビティに最適なデザインパターン

最終的には、元のコードが元のコードに戻ってしまったり、フラグメントアクティビティを設計するのに悪い方法があるようです。

これは、1つの画面を管理する1つのアクティビティで、そのアクティビティはその画面のすべてのUIアスペクトを制御します。さて、ActionBarSherlockを使用して、私は、画面のUIコントロールをフラグメントアクティビティのレイアウトに移動しました。ここでは、前のものと同じように、あるタブから次のタブへスワイプするためのタブ操作メカニズムを持つ主なアクティビティがあります。別の活動を開始する。

私の質問はこれです:オリジナルのコードを分割してフラグメントアクティビティにするにはどうすればよいですか?私はハンドラを使用して、断片的な活動から主な活動までのメッセージを内部的に渡すことを考えましたが、私が感じるようになるのは間違ったアプローチです。

私はこれにActionBarSherlockを使用しています。

このシナリオの具体的な例とそのアプローチ方法を検索しましたが見つかりませんでした。

編集:CommonsWareからのコメントの後、これはそれは私が達成しようとしてんだよ、http://androiduipatterns.com「ルイスルウェリンとFacebookの」スクリーンショットにここに示した第二の画像を見て、意図..です

前:Activityは、1つの画面のUIアスペクトを処理しました。

今:タブホストとViewPagerSherlockFragmentActivity、すなわち、APKの「メイン」活動であり、各タブ断片をSherlockFragmentから延びます。各タブは、UIコントロール付きの画面になりました。

+0

「各タブがフラグメントアクティビティとして機能するタブ/ビューページを結合したもの」 - アクティビティ内のアクティビティ(すなわち、「ActivityGroup」)は推奨されなくなりました。断片の後ろの半分は、活動の中で活動から離れていた。 – CommonsWare

+0

Googleのプレイストアのレイアウトのようなものです。あなたがスワイプしてビューを変更する場所です... http://www.androiduipatterns.com/の「Lewis Llewellyn and Facebook」スクリーンショットの2番目の画像を見てください。 .. – t0mm13b

+0

これはフラグメントを保持する 'FragmentPagerAdapter'をおそらく使用する' ViewPager'を保持する 'FragmentActivity'です。おそらくネストされたアクティビティはありません。 – CommonsWare

答えて

3

IMHOでは、ViewPagerの各フラグメントは、他のフラグメントが現在存在する可能性があることを知らないため、それ自体を処理します。そのフラグメント内の他のフラグメントやアクティビティ全体に影響を及ぼす可能性のあるイベントは、getActivity()を経由してホスティングアクティビティに渡され、複数のアクティビティからこのフラグメントをホストする予定の場合は、インターフェイスにキャストできます。いいえHandlerが必要です。

+0

ええ、私はあなたが言っていることでこれを視覚化することができます、元々はアクティビティにあったコードを取り除き、代わりに他の人から隔離しておくためにFragmentActivityにドロップしますか? – t0mm13b

+0

@ t0mm13b:あなたが現在持っているものを深く理解することを意味するので、私はその部分にコメントすることはできません。私はここからあなたのモニターを見ることができません。 – CommonsWare

+0

笑!十分に公正なので、ええ。それは公正なコメントです:)私から+1。私はこの物語に道徳的なものがあると思う! – t0mm13b

2

だから私はあなたが望むものは、異なる断片間でコードを複製していないと思いますか?非常によく似たフラグメントの場合、私は同じコードを持つ基本フラグメントを作成します。 Googleがよく気づいている別のオプションは、(静的な)メソッドでヘルパークラスを作成することです。 いずれの場合でも、フラグメントを別のフラグメントから呼び出さないように注意してください。

関連する問題