1. ホーム
  2. android

[解決済み] 親アクティビティに正しく戻るにはどうしたらよいですか?

2022-04-15 03:51:23

質問

アンドロイドアプリケーションに2つのアクティビティ(AとB)があり、アクティビティAからアクティビティBに取得するためにインテントを使用しています。parent_activityの使用は有効です。

 <activity
        android:name=".B"
        android:label="B" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.example.app_name.A" />
  </activity>

また、UPボタンが用意されているテーマを使っています。

つまり、アクティビティBを呼び出した後、アクティビティAに戻るためにUP-ボタンを使うことができます。 onCreate() -関数は、私が必要とする動作ではありません。私は、アクティビティBを呼び出す前に見えたように、アクティビティAを同じように見る必要があります。

これを実現する方法はあるのでしょうか?

EDIT

アクティビティAからアクティビティBを開始するコードは書いていません。Eclipseが自動生成していると思います。

Bクラスはこんな感じです。

    @Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_b);
    getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_b, menu);
    return true;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            NavUtils.navigateUpFromSameTask(this);
            return true;
    }
    return super.onOptionsItemSelected(item);
}

解決方法は?

アクティビティAを標準装備で宣言した launchMode を Android マニフェストに追加しました。によると ドキュメント というのは、次のような意味です。

システムは常にターゲットのアクティビティの新しいインスタンスを作成します。 タスクを作成し、そこにインテントをルーティングします。

そのため、システムはアクティビティAを再作成することを余儀なくされる(つまり onCreate タスクスタックが正しく処理されたとしてもです。

この問題を解決するには、マニフェストを変更し、Aアクティビティ宣言に次の属性を追加する必要があります。

android:launchMode="singleTop"

通話 finish() (以前解決策として提案したように)動作します。 だけ である場合 間違いない より複雑なワークフロー(例えば、通知からアクティビティBを起動する)では、これは事実ではないかもしれず、BからアクティビティAを正しく起動する必要があります。