0

我一直在寻找一种方法,让我的片段布局的空白细节端在启动时托管一个欢迎屏幕(或其他东西 - 可能是登录)。之后,当用户按下左侧菜单项之一时,我想消除程序运行剩余部分的片段。我不想将它添加到后台堆栈,因为这会扰乱我的配置更改。我考虑过使用共享首选项来托管关于片段是否已显示的布尔值。此方法的唯一关注点是在何处安全地重置应用程序下一次运行的布尔值。我的印象是,没有保证 onStop、onDetach 等肯定会在应用程序关闭时被调用,所以如果应用程序在错误的状态下关闭,它将变得无用(第一个片段不会'

到目前为止,我一直试图在我的主要活动的 onCreate 中添加一些东西,但没有成功。

提前致谢。

4

2 回答 2

0

如果您的片段可以是其自己的 Activity 的一部分,则可以使用该android:noHistory="true"属性使 Activity 远离后台堆栈。如果你的用户试图向后导航,它会在退出应用程序之前两次到达 backstack 的底部。

如果您无法将片段拆分为自己的活动,noHistory则可能无法正常工作-我不能说,因为我自己没有尝试过。

于 2013-05-09T05:06:29.657 回答
0

我能够想出一个解决方案来创建一个欢迎或登录屏幕,该屏幕将显示主要活动的片段和活动。经过测试,似乎工作正常。

private boolean welcomeShown;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_list);

        if (findViewById(R.id.item_detail_container) != null) { 
            mTwoPane = true;
            ((MainFragment) getSupportFragmentManager().findFragmentById(
                    R.id.item_list)).setActivateOnItemClick(true);
        }

        if (savedInstanceState != null){
                    welcomeShown = savedInstanceState.getBoolean("displayed");
        }

        if(!welcomeShown){

            if (mTwoPane){
                WelcomeFragment welcomeFragment = new WelcomeFragment();
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.item_detail_container, welcomeFragment)
                        .commit();
            }
            else{

                Intent welcomeIntent = new Intent(this, WelcomeActivity.class);
                startActivity(welcomeIntent);
                welcomeShown = true;
            }
        }           
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putBoolean("displayed", true);
    }
于 2013-05-09T10:21:07.403 回答