1

Android デベロッパー ガイドには、アクティビティはインテントを介して起動されると記載されています。

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

フラグメントの場合、画面に表示する通常の方法は次のとおりです。

ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();

ある場合にはクラスを指定し、別の場合にはオブジェクトを指定しなければならないのはなぜですか? つまり、次のようなものを使用したいと思います

Activity nextActivity = new SignInActivity();
Intent intent = new Intent(this, nextActivity);
startActivity(intent);
4

3 に答える 3

2

ActivityライフサイクルはAndroidによって管理されますが、Fragmentライフサイクルはそれが含まれるアクティビティに関連付けられているためです。

前述のように、Activityライフサイクルは Android によって管理されます。これは、とりわけ、Android がシステム リソースを管理し、バック スタックを処理するために必要です。

Fragment一方、さまざまなサイズのデバイスの UI をモジュール化し、より適切に整理するために導入されました。ドキュメントによると:

HONEYCOMB 以降、Activity実装は Fragmentクラスを利用してコードをより適切にモジュール化し、大画面用のより洗練されたユーザー インターフェイスを構築し、小画面と大画面の間でアプリケーションをスケーリングするのに役立ちます。

質問の後半に答えるために、実際にアクティビティの結果を 2 番目のアクティビティに渡すことができます。Activityただし、そのためにクラスのインスタンスを作成しないでください。正しい方法は、 を使用してstartActivityForResult()、結果の値を を介して宛先アクティビティに送信することIntentです。

于 2013-06-10T07:02:14.307 に答える
0

Android はアクティビティのライフサイクルを独自に処理します。Activity クラスのメソッドを見るだけで、空白を埋めるようなものです。Android はここでショットを呼び出します。これらのメソッドを介して、このアクティビティが作成、再開、一時停止されたときに何かをしたいかどうかを尋ねるだけです。

Android がアクティビティのライフ サイクルを内部で処理する理由は多数あります。

  1. アクティビティを適切に設定するには、多くの定型コードが必要です。システムに任せたほうがよいでしょう。全体が舞台裏であなたのためにセットアップされていますContextwindow management作成したすべてのアクティビティに対してそれを行う必要がある場合、余分な作業の量を想像してみてください。

  2. アクティビティは共有され、ホーム画面や他のアプリケーションがそれらを起動/使用したい場合があります。new MyActivity()彼らがいくつかのあいまいなパッケージを呼び出さなければならない場合、これはどのように可能でしょうか? . これが、アクティビティやその他の外部から呼び出し可能なコンポーネントをアプリケーション マニフェストで宣言する必要がある理由です。

  3. 多くのアプリケーションからのアクティビティは、Androidタスク(ユーザーの観点から見た作業) の一部にすることができます。バックスタックに自動的に配置/削除/再配置されます。繰り返しになりますが、開発者がこのセットアップ全体をいじるよりも、Android の方が作成と破棄を管理する方が優れています。

  4. ユーザーが気にかけているのは、要求されたときにアクティビティが表示され、ユーザーが別の場所に移動した場合に邪魔にならないようにすることだけです。Android はこれを強制します。アクティビティを単独で表示したり、消えないようにすることは、そのようにプログラムできるという理由だけで容認できません。

一方 Fragments は内部的なものになりました。これらはアクティビティ内にあり、外部のアプリケーションやタスクからアクセスしたり共有したりすることはありません。フラグメントはアプリケーション マニフェストの一部でさえないため、外部に公開されません。フラグメントのライフサイクルはその親アクティビティのライフサイクルにバインドされているため、Android は各フラグメントを個別に心配する必要はありません。Android は、内部でフラグメントをどう処理するかは気にしません。アクティビティを終了するだけで、その中のすべてが破棄されます。

于 2013-06-10T07:32:46.633 に答える
0

フラグメントを追加するときに、そのフラグメントを挿入する場所を正確に指定しています。したがって、理想的な方法は、

  1. フラグメントを作成します。
  2. 現在のアクティビティのレイアウトに挿入します。
  3. トランザクションを使用して、現在のアクティビティに追加されたフラグメントを削除/管理します。

既存のアクティビティにアタッチせずに、フラグメントだけを起動または使用することはできません。

于 2013-06-10T07:01:40.147 に答える