1

我正在开发一个带有导航抽屉的Android应用程序以这种方式工作:用户打开应用程序并弹出一个教程(一个带有寻呼机滑动片段的活动,称为ScreenSlideActivity.java);当用户完成滑动教程时,他按下“完成”按钮导致 MainActivity 的初始化(创建一个drawerLayout,drawerToggle等)

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

我在主活动中尝试过这段代码:

if (savedInstanceState == null) {
            SelectItem("tutorial");
}

确保 ScreenSlideActivity.java 立即启动。这个解决方案的问题是,当教程打开时,我不能再从那里访问 MainActivity.java,既不能从“向上”按钮也不能从教程最后一页的“完成”按钮,可能是因为某种原因我不再将主要活动作为父活动。

然后我尝试了这个解决方案更改应用程序的启动活动 - Android修改清单 xml 文件。添加:

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

到 ScreenSlideActivity。这个解决方案的问题是它改变了我的项目的结构,使我的 ScreenSlideActivity.java 作为 Main 和 Launching Activity(因此我不能再从这里访问 MainActivity),而我只想显示一次。

我还可以做些什么?

4

2 回答 2

1

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

  1. 在您的 MainActivity 检查它是否是用户第一次启动应用程序。最常见的方法是使用 SharedPreferences 并检查布尔值是真还是假。
  2. 如果是第一次,则为 ScreenSlideActivity 类启动一个没有特定标志的新活动。您的 MainActivity 将在堆栈中:

    MainsActivity -> ScreenSlideActivity
    
  3. 当用户按下完成按钮时,您可以调用 ScreenSlideActivity 上的 finish() 方法,该方法将从堆栈中删除活动并带回 MainActivity。

于 2015-03-04T20:02:06.587 回答
1

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

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

   }

}

这里有类似的问题:https ://stackoverflow.com/a/13237848/4555911

于 2015-03-04T20:09:31.563 回答