web-dev-qa-db-ja.com

ActionBarの「上」ボタンは親アクティビティを破壊しますが、「戻る」ボタンは破壊しません

比較的シンプルなAndroidアプリには、アイテムのリストを表示するActivityと、選択したアイテムの詳細を表示する別のアプリがあります。リストのアクティビティを開始します。 FLAG_ACTIVITY_CLEAR_TOPを使用して、この呼び出し元のログインアクティビティをクリアします):

Intent intent = new Intent(this, ListInstancesActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
finish();

そして、そのアクティビティ内から、選択されているアイテムに対して次の操作を行います。

Intent detailIntent = new Intent(this, ShowInstanceActivity.class);
detailIntent.putExtra(ShowInstanceFragment.ARG_ITEM_ID, id);
startActivity(detailIntent);

すべて正常に動作し、ソフトキーの「戻る」ボタンを使用すると、予想どおりListInstancesActivityに戻ります。ただし、代わりにアクションバーのバックアップボタンを押すと、ListInstancesActivityが破棄されて再作成されます。これは、比較的計算コストがかかるため、悪いです。

アクションバーをソフトキーと同じように動作させ、破壊するのではなく、前のアクティビティに戻すにはどうすればよいですか。

アクションライブラリのサポートライブラリバージョンを使用していることに注意してください。

私のAndroidManifest.xmlの関連部分は

<activity
  Android:name=".agenda.ListInstancesActivity"
  Android:label="@string/list_instances_activity_title">
</activity>
<activity
  Android:name=".agenda.ShowInstanceActivity"
  Android:label="@string/show_instance_activity_title"
  Android:parentActivityName=".agenda.ListInstancesActivity">
</activity>
49
jgm

アクションバーアップボタンの動作をオーバーライドできます:

public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {

case Android.R.id.home:
    onBackPressed();
    return true;
}

return super.onOptionsItemSelected(item);
}

そして、戻るボタンの効果を再現します。

31
Aashir

Android manifest.xmlで、親アクティビティタグに次の属性を追加すると、うまくいきました。

Android:launchMode="singleTop"

リファレンス: http://developer.Android.com/guide/topics/manifest/activity-element.html

同様の質問を参照してください: どのように親アクティビティに正しく戻ることができますか?

97
vikki_logs

マニフェストで親アクティビティを指定すると、アクションバーの[ナビゲーション]ボタンをクリックすると、親アクティビティが再起動されます。

これを確認してください私はすでにこの質問に答えました

https://stackoverflow.com/a/32401235/3479012

onOptionsItemSelectedでAndroid.R.id.homeにアクセスしてアクションバーのネビゲーションボタンを上書きし、トップアクティビティを終了する必要があります。

3
Jolson Da Costa

マニフェストで親アクティビティが適切に設定されていないようです。これをShowInstanceActivityアクティビティタグ内に追加します。

<meta-data Android:name="Android.support.PARENT_ACTIVITY" Android:value=".agenda.ListInstancesActivity" />

したがって、最終アクティビティタグは次のようになります。

<activity
  Android:name=".agenda.ShowInstanceActivity"
  Android:label="@string/show_instance_activity_title"
  Android:parentActivityName=".agenda.ListInstancesActivity">
  <meta-data Android:name="Android.support.PARENT_ACTIVITY" Android:value=".agenda.ListInstancesActivity" />
</activity>
1
T3KBAU5
 <?xml version="1.0" encoding="utf-8"?>
<application
    Android:allowBackup="true"
    Android:icon="@mipmap/ic_launcher"
    Android:label="@string/app_name"
    Android:roundIcon="@mipmap/ic_launcher_round"
    Android:supportsRtl="true"
    Android:theme="@style/AppTheme">
    <activity Android:name=".WelcomeActivity">
        <intent-filter>
            <action Android:name="Android.intent.action.MAIN" />

            <category Android:name="Android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity Android:name=".MainActivity" />
    <activity Android:name=".StartActivity" />
    <activity
        Android:name=".LoginActivity"
        Android:parentActivityName=".StartActivity"/>
    <activity
        Android:name=".RegisterActivity"
        Android:parentActivityName=".StartActivity"/>


    <activity Android:name=".SettingActivity">
    </activity>


</application>
Anyone can check this code and find error??/

[戻る]ボタンをクリックすると、アプリが自動的に閉じられます...

0
Syed Junaid