Android 工作室更改启动 activity 仅一次
Android studio change startup activity only once
我正在开发一个带有导航抽屉的 Android 应用程序:用户打开该应用程序和一个教程(一个带有寻呼机滑动片段的 activity,称为 ScreenSlideActivity.java ) 弹出;当用户完成滑动教程时,他按下 "finish" 按钮导致 MainActivity 初始化(创建 drawerLayout、drawerToggle 等)
我需要做的是在应用首次启动后打开教程 activity 一次。
我已经在主 Activity:
中尝试使用此代码
if (savedInstanceState == null) {
SelectItem("tutorial");
}
确保 ScreenSlideActivity.java 立即启动。这个解决方案的问题是,当打开教程时,我无法再从那里访问 MainActivity.java,无论是从 "up" 按钮还是从教程最后一页的 "finish" 按钮,可能是因为某种原因我不再有 main 作为父 activity。
然后我尝试了此解决方案 change application's starting activity - 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 了)同时我只想显示一次。
我还能做什么?
我通常处理临时屏幕的方法与您的第一个解决方案类似:
- 在您的 MainActivity 中检查用户是否是第一次启动应用程序。最常见的方法是使用 SharedPreferences 并检查布尔值是真还是假。
如果是第一次,您可以为您的 ScreenSlideActivity class 启动一个新的 activity,没有特定的标志。您的 MainActivity 将在堆栈中:
MainsActivity -> ScreenSlideActivity
当用户按下完成按钮时,您可以在 ScreenSlideActivity 上调用 finish() 方法,这将从堆栈中删除 activity 并恢复您的 MainActivity。
如果是第一次打开应用程序,您可以使用 SharedPreferences check/set
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
}
}
这里有类似的问题:
我正在开发一个带有导航抽屉的 Android 应用程序:用户打开该应用程序和一个教程(一个带有寻呼机滑动片段的 activity,称为 ScreenSlideActivity.java ) 弹出;当用户完成滑动教程时,他按下 "finish" 按钮导致 MainActivity 初始化(创建 drawerLayout、drawerToggle 等)
我需要做的是在应用首次启动后打开教程 activity 一次。
我已经在主 Activity:
中尝试使用此代码if (savedInstanceState == null) {
SelectItem("tutorial");
}
确保 ScreenSlideActivity.java 立即启动。这个解决方案的问题是,当打开教程时,我无法再从那里访问 MainActivity.java,无论是从 "up" 按钮还是从教程最后一页的 "finish" 按钮,可能是因为某种原因我不再有 main 作为父 activity。
然后我尝试了此解决方案 change application's starting activity - 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 了)同时我只想显示一次。
我还能做什么?
我通常处理临时屏幕的方法与您的第一个解决方案类似:
- 在您的 MainActivity 中检查用户是否是第一次启动应用程序。最常见的方法是使用 SharedPreferences 并检查布尔值是真还是假。
如果是第一次,您可以为您的 ScreenSlideActivity class 启动一个新的 activity,没有特定的标志。您的 MainActivity 将在堆栈中:
MainsActivity -> ScreenSlideActivity
当用户按下完成按钮时,您可以在 ScreenSlideActivity 上调用 finish() 方法,这将从堆栈中删除 activity 并恢复您的 MainActivity。
如果是第一次打开应用程序,您可以使用 SharedPreferences check/set
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
}
}
这里有类似的问题: