好的,我有一个应用程序可以创建以下后台堆栈:
它在具有足够RAM的设备上运行良好,但在较旧的设备上我遇到了一个特殊的问题。在这些设备上,每个新活动触发前一个活动的销毁以获得足够的内存。但是,按详细信息活动上的后退按钮会使用户进入登录活动而不是主活动。我使用默认行为(清单文件中没有Intent标志或与堆栈相关的活动属性)。根据我对documentation的理解,后退按钮的默认行为是让你回到之前的活动,而不是根活动。我错过了什么?
编辑: 以下是我在清单中声明我的活动的方式:
<activity
android:name=".LoginActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_login"
android:theme="@android:style/Theme.Holo.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".BoardViewActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@style/activity">
</activity>
<activity
android:name=".TaskDetailsActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/title_activity_task_details">
</activity>
LoginActivity启动BoardViewActivity:
Intent intentBoardView = new Intent(this, BoardViewActivity.class);
intentBoardView.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intentBoardView);
finish();
然后BoardViewActivity的一个片段启动TaskDetailsActivity:
Intent intent = new Intent(getActivity(), TaskDetailsActivity.class);
startActivityForResult(intent, REQUEST_CODE_TASKDETAILS);
然后在TaskDetailsActivity:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case (android.R.id.home):
TaskDetailsActivity.this.setResult(RESULT_CANCELED);
finish();
return true;
case (R.id.action_save):
save();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
super.onBackPressed();
}
如果我使用后退按钮或软件主页(向上)按钮并不重要 - 它总是返回到LoginActivity。
答案 0 :(得分:0)
@Override
public void onBackPressed() {
finish();
super.onBackPressed();
}
使用BackPressed完成app活动。