Android 如何处理只出现一次的介绍活动的后堆栈

Android 如何处理只出现一次的介绍活动的后堆栈,android,android-intent,android-activity,android-navigation,Android,Android Intent,Android Activity,Android Navigation,我的应用程序目前有一个主要活动,处理启动器意图和文件打开意图。我想添加一个介绍活动,在第一次运行时出现在Main之前 Intro活动为用户提供了转到Main或转到activity C的选项,后者应将Main视为其父活动 正确的处理方法是什么 我是否创建了一个新的根活动来显示介绍或转发 主要目的是什么 我是否将Main作为根活动,并在适当的情况下使用它来启动简介 无论采用哪种方法,我如何正确处理后堆栈,以便在用户离开简介后将Main视为根活动 谢谢你的建议 如果使用第一种方法,如果用户看到了介绍,

我的应用程序目前有一个主要活动,处理启动器意图和文件打开意图。我想添加一个介绍活动,在第一次运行时出现在Main之前

Intro活动为用户提供了转到Main或转到activity C的选项,后者应将Main视为其父活动

正确的处理方法是什么

  • 我是否创建了一个新的根活动来显示介绍或转发 主要目的是什么
  • 我是否将Main作为根活动,并在适当的情况下使用它来启动简介
  • 无论采用哪种方法,我如何正确处理后堆栈,以便在用户离开简介后将Main视为根活动 谢谢你的建议

  • 如果使用第一种方法,如果用户看到了介绍,则可以在
    SharedReference
    true中保留bool值,如果用户没有看到,则为false
  • 但是如果您采用第二种方法(我会选择),您从
    main活动开始,然后检查一个值或您决定显示介绍的任何内容,然后在您的条件通过时启动它,然后返回您的
    main活动
    ,即使您想启动
    ActivityC
    ,也可以从那里启动它
  • 您还可以在启动
    MainActivity
    后调用finish,从
    Backstack
    中删除不需要的
    Activity
    ,在这种情况下,
    IntroActivity
    Backstack
    中删除
    IntroActivity
    ,如果将
    MainActivity
    作为根目录,则它将按照您的需要工作

  • 如果使用第一种方法,如果用户看到了介绍,则可以在
    SharedReference
    true中保留bool值,如果用户没有看到,则为false
  • 但是如果您采用第二种方法(我会选择),您从
    main活动开始,然后检查一个值或您决定显示介绍的任何内容,然后在您的条件通过时启动它,然后返回您的
    main活动
    ,即使您想启动
    ActivityC
    ,也可以从那里启动它

  • 您还可以在启动
    MainActivity
    后调用finish,从
    Backstack
    中删除不需要的
    Activity
    ,在这种情况下,
    IntroActivity
    Backstack
    中删除
    IntroActivity
    ,如果您将
    MainActivity
    作为根目录,它将根据您的需要工作。

    您应该为最常见的情况编写应用程序代码,然后为所有其他情况构建backbackbackback。我假设最常见的情况是:用户运行应用程序(在第一次运行后)并输入
    MainActivity

    由此,您可以构造其他用户流。一位具有适当逻辑的伪代码:

    class MainActivity extends Activity {
    
        public void onCreate(Bundle state) {
            super.onCreate(state);
            setContentView(...);
    
            // get the intent used to launch this activity to work out the logic
            Intent intent = getIntent();
    
            // how were we launched:
            if (/*is first run? */) {
                // switch from MainActivity to IntroActivity
                startActivity(IntroActivity);
                finish();
                return;
            }
            else if ( /* was launched from intro and not going to ActivityC */ ) {
                // carry on as normal!
            }
            else if ( /* was launched from intro and going to ActivityC */ ) {
                // launch ActivityC (which will now have MainActivity as its parent)
                startActivity(ActivityC);
            }
    
            /* if we reach here, the user launched the app normally (the most
             common case) or we have been launched from Intro */
            ....
        }
    }
    
    简介:

    class IntroActivity extends Activity {
    
      public launchNextActivity(boolean gotoActivityC) {
            // whatever the user chooses, we return to MainActivity
            Intent i = new Intent(this, MainActivity.this);
            // tell MainActivity if we want to go to ActivityC
            i.putExtra("GOTO_ACTIVITY_C", gotoActivityC);
    
            // launch MainActivity and finish the Intro
            startActivity(i);
            finish();
      }
    }
    

    我将让您替换逻辑注释并填写其余内容。

    您应该为最常见的情况编写应用程序代码,然后为所有其他情况构建backbackback。我假设最常见的情况是:用户运行应用程序(在第一次运行后)并输入
    MainActivity

    由此,您可以构造其他用户流。一位具有适当逻辑的伪代码:

    class MainActivity extends Activity {
    
        public void onCreate(Bundle state) {
            super.onCreate(state);
            setContentView(...);
    
            // get the intent used to launch this activity to work out the logic
            Intent intent = getIntent();
    
            // how were we launched:
            if (/*is first run? */) {
                // switch from MainActivity to IntroActivity
                startActivity(IntroActivity);
                finish();
                return;
            }
            else if ( /* was launched from intro and not going to ActivityC */ ) {
                // carry on as normal!
            }
            else if ( /* was launched from intro and going to ActivityC */ ) {
                // launch ActivityC (which will now have MainActivity as its parent)
                startActivity(ActivityC);
            }
    
            /* if we reach here, the user launched the app normally (the most
             common case) or we have been launched from Intro */
            ....
        }
    }
    
    简介:

    class IntroActivity extends Activity {
    
      public launchNextActivity(boolean gotoActivityC) {
            // whatever the user chooses, we return to MainActivity
            Intent i = new Intent(this, MainActivity.this);
            // tell MainActivity if we want to go to ActivityC
            i.putExtra("GOTO_ACTIVITY_C", gotoActivityC);
    
            // launch MainActivity and finish the Intro
            startActivity(i);
            finish();
      }
    }
    

    我将让您替换逻辑注释并填写其余部分。

    我将选择第一个,因为介绍仅用于第一次运行。在第二次中,总是由主活动(选择活动)决定重定向到活动C或继续。我会选择第一次,因为介绍仅用于第一次运行。在第二次中,始终由主活动(选择活动)决定重定向到活动C或继续。