41

私には2つの活動があります。Activity Aと言うActivity B。 [ボタンをクリックして起動] から、
これに使用するコードを次に示します。Activity AActivity B

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


この時点で、私はActivity B. の on create メソッドでActivity B、up ボタンを有効にします。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_news);

    getActionBar().setDisplayHomeAsUpEnabled(true); //Here//
}

「上」ボタンのイベントハンドルには、次のコードがあります。

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


Activity Aここで、アクション バーの [上へ] ボタンをクリックして、次のよう に戻ることにしました。ここに画像の説明を入力

問題は、「上へ」ボタンをクリックすると、どちらに戻ってActivity Aも問題ありませんが、再起動することです。どうすれば再起動を停止できますか? 再開してほしい。

ハードウェアの戻るボタンを使用すると、期待どおりに機能します。つまりActivity A、再起動するのではなく、アクセスして再開します。 アクティビティを再開したいのは、そのアクティビティで文字列をオンラインでダウンロードするため、ユーザーがアクティビティ B -> アクティビティ A

に移動したときにデータを再ダウンロードし続けたくないからです。


セクションのマニフェスト ファイルを編集Activity Bすると、次のようになります。

<activity
    android:name="com.example.android.ActivityB"
    android:label="@string/title_activity_view_news"
    android:parentActivityName="com.example.android.ActivityA">
    <meta-data
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.example.android.ActivityA" />
</activity>


編集 2 [回答] わかりました、これはかなり予想外でしたが、AndroidManifest.xml のアクティビティ A セクションで、次の行ライナーを追加する必要がありました。android:launchMode="singleTop"したがって、次のようになります。

<activity
    android:name="com.example.android.ActivityA"
    android:label="@string/app_name" 
    android:launchMode="singleTop"> //**HERE**//
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

これについての説明はここにあります

4

2 に答える 2

57

コメントではなく回答として追加する必要がありました..しかし、必要に応じて他の人が見ることができるように、必要に応じて受け入れることができます。

https://stackoverflow.com/a/16147110/3286163

基本的に、Android を要約すると、そうしないように指定しない限り、常にアクティビティが再作成されます。

android:launchMode="singleTop"

注: 参照に記載されているように、返すアクティビティがバック スタックの一番上にない場合は機能しません。

他の人にとっては、これが役立つと思われる場合は、私の代わりに URL の回答に賛成票を投じてください。

于 2014-02-16T00:44:28.227 に答える
0

プログラムで同じ結果を達成することもできます

Intent upIntent = NavUtils.getParentActivityIntent(this);
upIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
NavUtils.navigateUpTo(this, upIntent);
于 2015-08-24T10:13:27.957 に答える