28


私の PoC には、 、 、 、 、および といういくつかHomeActivityCreateActivityアクティビティSearchActivityResultsActivityありResultDetailsActivityますUpdateActivity

CreateSearchという 2 つの主要なナビゲーション パスがあります。

作成パスのナビゲーションは次のとおりです。HomeActivity--> CreateActivity-(完了時)->HomeActivity

検索のナビゲーションは次のとおりです。HomeActivity--> SearchActivity--> ResultsActivity( ListActivity) --> ResultDetailsActivity--> UpdateActivity-(完了時)-> ResultDetailsActivity(更新されたデータあり)。

現在、 new へのナビゲーションはメソッドActivity経由です。startActivity(intent)ただし、これにより、それぞれの複数のインスタンスActivityが開かれます。

私はAndroidにはかなり慣れていません。誰かがこれを回避する方法を提案してもらえますか?

4

6 に答える 6

39

Android マニフェストで、<activity>タグにandroid:launchMode="singleTask"

完全なリストについては、アクティビティのドキュメントを確認してください

あなたのマニフェストで:

    <activity android:name=".YourActivity"
              android:launchMode="singleTask"
              android:label="@string/app_name" />

注: シングルトンは使用しないでください。

于 2012-05-16T08:26:02.260 に答える
34

次のフラグのいずれかを設定すると、問題の解決に役立つ場合があります。

  • Intent.FLAG_ACTIVITY_CLEAR_TOP
  • Intent.FLAG_ACTIVITY_REORDER_TO_FRONT
于 2012-05-16T08:26:37.093 に答える
9

Intent次の場合にフラグを使用しstartActivityます。

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

旗にはたくさんの種類があります。

これは役に立ちます: Android シングルトン アクティビティ

于 2012-05-16T08:25:49.740 に答える
3

アクティビティを管理するための最良の形式は使用です

startActivityForRestult(意図、ID)

アクティビティを呼び出すこのメソッドを使用すると、HomeActivity は Override メソッドで他のアクティビティの結果を管理できます。

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
}

さまざまなアクティビティの既知の結果を送信して管理できます。例:
(常に startActivityForResult を使用)

HomeActivity --> SearchActivity --> ResultsActivity(ListActivity) --> ResultDetailsActivity --> UpdateActivity -(完了時)-> ResultDetailsActivity (更新されたデータ)。Return キーを押して SEARCH_fINISHED を送信 -->UpdateActivity がこれをキャッチし、onActivityResult メソッドで同じ結果を送信し、finish() --> searchActivity と同じ --> Home

これもあなたを助けることができます:

Intent.FLAG_ACTIVITY_CLEAR_TOP
Intent.FLAG_ACTIVITY_REORDER_TO_FRONT

http://blog.akquinet.de/2010/04/15/android-activites-and-tasks-series-intent-flags/

于 2012-05-16T08:29:10.670 に答える
1

JoonSung Kim が投稿した回答に追加するものはほとんどありません。「エラーを解決できません」をスローする addFlag メソッドを変更します。

変化する:intent.addFlag(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

に:intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

コードは次のとおりです。

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);

同じアクティビティの複数のインスタンスを防ぐには、フラグを変更します

から :intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

に:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

コードは次のとおりです。

Intent intent = new Intent(this, MyActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
于 2016-08-22T11:52:53.280 に答える