我们有一个应用程序,包含三个活动主列表和详细信息min SDK 19,并使用SDK 25工具开发。我们在Main活动中有一个密码登录屏幕。当我们使用由设备后退按钮触发的onBackPressed时。为了学习如何管理多种屏幕尺寸,我们编写了一个测试应用程序,每个活动都有一个附加布局-sw600dp。使用Nexus 5X仿真器导航应用程序时,导航按设计运行。然后,当使用Nexus 7模拟器导航时,我们需要双击设备后退按钮来触发该方法。我能够使用下面发布的代码解决这个问题。我们可以解释为什么在添加layout-sw600dp文件时需要调整代码。我们猜测代码正在从后栈中删除List活动。 清单
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ListActivity"
android:launchMode="singleTask">
</activity>
<activity android:name=".DetailsActivity"
android:launchMode="singleTask">
</activity>
</application>
列出意图转到详细信息
private void addListenerOnButtonMove() {
btnMove.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent( ListActivity.this, DetailsActivity.class );
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
/* CODE above is necessary when using additional ACTIVITY sw600dp files */
//intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity( intent );
}
} );
}
详细意图转到主要
public void onBackPressed(){
Toast.makeText(DetailsActivity.this,"Details Was Clicked",Toast.LENGTH_LONG).show();
Intent intent = new Intent( DetailsActivity.this, MainActivity.class );
startActivity( intent );
}
主要清除应用
public void onBackPressed(){
Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startMain.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
/* This code needs 2 clicks to work in Emulator Tablet 7 inch*/
/* If you navigate in the app then the code fires with FIRST CLICK */
//startMain.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
//startMain.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(startMain);
}
所以我们的问题是为什么在添加layout-sw600dp但基本布局不需要时需要添加这行代码
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);