多个布局文件和后台堆栈导航

时间:2016-12-19 17:51:56

标签: android android-layout android-intent

我们有一个应用程序,包含三个活动主列表和详细信息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);

0 个答案:

没有答案