2016-05-10 9 views
1

アクティビティAがフラグメントAを起動します。私はfragmentBを起動する必要があります。それを行う2つの方法がありますが、どちらが最善の方法であるかわかりません最初に、FragmentBを起動するActivityBを作成します。したがって、ActivityA→ActivityB→FragmentB。フラグメントが別のアクティビティを伴う必要がある理由

第二の方法は、ちょうど私がUdacityのコースを取ったとき、彼らは最初の方法をperferredが、私はのために第二活性(activityB)を作成する際にロジックを参照してくださいカントFragmentB

Fragment b = AddRecordFragment.init(Integer.valueOf(f.getId())); 
getFragmentManager().beginTransaction().replace(R.id.container,b).addToBackStack(null).commit(); 

でFragmentAを交換しています断片を開始する単なる目的。それぞれのメリットとデメリットは何ですか?

+0

あなたは彼らと何をしているのかによって異なります –

+1

最初の方法が有利な場合の例を教えてください。 –

+0

私は、フラグメントが画面いっぱいになったときにメインアクティビティとは別のアクティビティの一部として起動するフラグメントを持つアプリを持っています。タブレットでは、2ペインのディスプレイのための十分なスペースがある場合、主なレイアウトが引き続き表示されるように、メインアクティビティの一部としてフラグメントを起動します。これは同じフラグメント、同じコードですが、UIの動作に応じて2つの異なる方法で使用されます。断片のデザイン思想の1つは、このタイプの柔軟性です。それがあなたを助けることを願っています – Cheticamp

答えて

1

実際には、これらの種類の操作を行う「正しい」方法はありません。お勧めの方法はありますが、ベストプラクティスがあり、一般的な使用方法がありますが、これはすべて、開発者がユーザーにとって最高のエクスペリエンスを提供するために必要なことと、これらのことを通して考えてみることで、特定のシナリオに最適な答えが得られます。

あなたの特定の質問に対処するには、アクティビティが何をしているのか、目的が何であるのか考えてから、なぜフラグメントが必要なのかを考える。 Androidのドキュメントから:

活動は断片について

...ユーザーが何かをするために対話することができ で画面を提供するアプリケーションコンポーネントです:

フラグメントは、アクティビティの アクティビティでの動作またはユーザーインターフェイスの一部を表します。

既に、各ドキュメントの最初の文章からも、両方のコンポーネントについて明確な目的があります。アクティビティは、ユーザーのアクティビティです。これは、ユーザーが何かをやることを可能にする目的の画面です。一方、フラグメントは、アクティビティにアタッチされるユーザーのインタラクションやデータのUIやその他の要素を提供するモジュラーデザインです。言い換えれば、ユーザーは、アクティビティが何らかの対話のポイントを提供するか、または目に見える形のデータを提供することによって、アクティビティが望んでいることを行うのに役立ちます。

ここで、これらの2つのコンポーネントの目的を明確にしたので、アクティビティBの目的があなたの質問にどのようなものか尋ねてください。フラグメントBを使用しても、新しいやり方をユーザーに提供しますか?アクティビティAでユーザーが行っていたこととは異なるものを提供しますか?そうであれば、新しいアクティビティがおそらく最適なデザインの選択肢になります。しかし、フラグメントBが、ユーザーがアクティビティーAで何をやっているのか、あるいはそのアクティビティーを何らかの形で拡張しようとする別の方法であれば、アクティビティーAは単にフラグメントAをフラグメントBに置き換えることが最良の選択ですFragmentTransactionを介して

0

フラグメントを扱うアイデアの全体は、柔軟なデザインを作成することです。つまり、同じビューコンテナを使用して、さまざまな機能を持つ異なるコンテンツを表示できます。したがって、別のフラグメントを表示する必要がある場合は、そのフラグメントをコンテナ内に置き換える必要があることは明らかです。 場合によっては、異なる活動を使用することをお勧めします。設定を起動している間は同じアクティビティでコンテキストを設定できる別のコンテンツの場合は、間違いなくフラグメントマネージャを使用してコンテナ内で置き換えてください。

0

それはあなたがしたいことについての利点ではありません。

Aフラグメント今あなたが断片は、あなたがそれを第二の方法を起動する最初の活動の一部になりたい場合は行動や

活動におけるユーザーインターフェースの部分を表しています。つまり、

Fragment b = AddRecordFragment.init(Integer.valueOf(f.getId())); 
getFragmentManager().beginTransaction().replace(R.id.container,b).addToBackStack(null).commit(); 

ただし、2番目のアクティビティの一部にしたい場合は、最初の方法で起動します。

フラグメントがどのアクティビティに属しているかによって異なります。

関連する問題