4

フラグメントを使用するイデオロギー的に正しい方法について少し混乱しています。

Android 開発者が述べているように、

フラグメントは、アクティビティの動作またはユーザー インターフェイスの一部を表します。複数のフラグメントを 1 つのアクティビティに結合して、マルチペイン UI を構築し、フラグメントを複数のアクティビティで再利用できます。フラグメントは、独自のライフサイクルを持ち、独自の入力イベントを受け取り、アクティビティの実行中に追加または削除できる、アクティビティのモジュラー セクションと考えることができます (「サブ アクティビティ」のようなもので、さまざまなアクティビティで再利用します)。

また:

フラグメントは、アプリケーションの機能と UI を再利用可能なモジュールに分解します 画面に複数のフラグメントを追加して、アクティビティの切り替えを回避します

私のフラグメントの使用方法は次のとおりです。メインのアクティビティは 1 つだけで、フラグメントはたくさんあります。活動を始めるのではなく、断片を置き換えることを好みます。たとえば、 、 、 がFeedsFragmentあり、FriendsFragmentスライドMessagesFragmentメニューから何かを選択するとActivity、メインが置き換えられますFragment。他の Fragment から Fragment を起動する場合は、前の Fragment をバックスタックに入れます。

一部のフラグメントでは、Activity でアクションバーを変更する必要があります。

((MainActivity)getActivity()).setupActionBar();

現在、タブレット レイアウトをサポートするコードはありません (Android 開発者の例に見られるように) が、追加する予定です。

それで、これは物事を行う正しい方法ですか?それとも、何かが完全に欠けていますか?

4

1 に答える 1

0

ご存じのとおり、フラグメントには独自のライフサイクルがあり、アクティビティのライフサイクルから必要なときにいつでもそのイベントを使用できます。

しかし、フラグメントのライフサイクルはアクティビティのライフサイクルに依存するため、アクティビティが破壊されると、フラグメントも破壊されます。

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();    
// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);    
// Commit the transaction
transaction.commit();

フラグメントトランザクションを使用して、1 つのアクティビティでそれらを置き換えることができます。同じ方法を使用すると思いますが、

あなたは間違った方法ではないと思います。異なるアクティビティを使用する代わりにフラグメントを使用しても問題はありません。

しかし、あなたは考えるべきです、あなたは本当に1つの活動でそれらを使用する必要がありますか? 1 つのアクティビティでそれらを表示する必要がない場合は、フラグメントを使用する必要はありません。

フラグメントは常にアクティビティに埋め込む必要があり、フラグメントのライフサイクルはホスト アクティビティのライフサイクルの影響を直接受けます。たとえば、アクティビティが一時停止されると、その中のすべてのフラグメントも一時停止され、アクティビティが破棄されると、すべてのフラグメントも破棄されます。ただし、アクティビティの実行中 (再開されたライフサイクル状態) は、追加や削除など、各フラグメントを個別に操作できます。このようなフラグメント トランザクションを実行する場合、アクティビティによって管理されるバック スタックに追加することもできます。アクティビティ内の各バック スタック エントリは、発生したフラグメント トランザクションの記録です。バック スタックを使用すると、[戻る] ボタンを押すことで、ユーザーはフラグメント トランザクションを元に戻す (後方に移動する) ことができます。

結果として、それは間違っていませんが、必要がなければ、別のアクティビティを作成する方が維持しやすいと思います。

ここに画像の説明を入力

于 2013-03-25T10:06:23.963 に答える