Java Android studio仅更改一次启动活动

Java Android studio仅更改一次启动活动,java,android,android-activity,android-studio,app-startup,Java,Android,Android Activity,Android Studio,App Startup,我正在开发一个Android应用程序,导航抽屉是这样工作的:用户打开应用程序,弹出一个教程(一个带有寻呼机滑动片段的活动,称为ScreenSlideActivity.java);当用户完成滑动教程时,他按下“完成”按钮,导致主活动的初始化(创建抽屉布局、抽屉切换等) 我需要做的是在应用程序第一次启动后只打开一次教程活动 我在主要活动中尝试了以下代码: if (savedInstanceState == null) { SelectItem("tutorial"); }

我正在开发一个Android应用程序,导航抽屉是这样工作的:用户打开应用程序,弹出一个教程(一个带有寻呼机滑动片段的活动,称为ScreenSlideActivity.java);当用户完成滑动教程时,他按下“完成”按钮,导致主活动的初始化(创建抽屉布局、抽屉切换等)

我需要做的是在应用程序第一次启动后只打开一次教程活动

我在主要活动中尝试了以下代码:

if (savedInstanceState == null) {
            SelectItem("tutorial");
}
确保ScreenSlideActivity.java立即启动。这个解决方案的问题是,当教程打开时,我无法再从那里访问MainActivity.java,也不能从“up”按钮访问MainActivity.java,也不能从教程最后一页的“finish”按钮访问MainActivity.java,可能是因为某种原因,我不再将main作为父活动

然后我尝试了修改清单xml文件的这个解决方案。添加:

        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

为了提高效率。 这个解决方案的问题是它改变了我项目的结构,使我的ScreenSlideActivity.java成为主要的启动活动(因此我无法再从这里访问主要活动),而我只想显示一次


我还能做什么?

我通常处理临时屏幕的方法与您的第一个解决方案类似:

  • 在MainActivity中,检查用户是否是第一次启动应用程序。最常用的方法是使用SharedReferences并检查布尔值是真是假
  • 如果这是第一次,您将为ScreenSlideActivity类启动一个没有特定标志的新活动。您的主要活动将在堆栈中:

    MainsActivity -> ScreenSlideActivity
    
  • 当用户按下finish按钮时,您可以在ScreenSlideActivity上调用finish()方法,该方法将从堆栈中删除活动并返回MainActivity


  • 您可以使用SharedReferences检查/设置是否是第一次打开应用程序

    String preferences_name = "isFirstTime";
    
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
       ...
    
        firstTime();
    }
    ...
    
    public  void  firstTime(){
    
        SharedPreferences sharedTime = getSharedPreferences(preferences_name,0); 
        if (sharedTime.getBoolean("firstTime",true))
        {
    
            //Your tutorial code
    
            sharedTime.edit().putBoolean("firstTime",false).apply();
        }
        else
        {
            //When not using tutorial code
    
       }
    
    }
    

    这里有一个类似的问题:

    回答得很好。我还按照Quanturium的建议,在按下“完成”按钮时使用了
    finish()
    ,以便在用户导航回主活动后从堆栈中删除第二个活动。它运作顺利。非常感谢你