首页 > 解决方案 > 如果我递归调用 startActivityForResult() 会发生什么?

问题描述

我打算向用户显示四个欢迎屏幕,这些屏幕只对新用户显示一次。为此,我在启动时在首选项中保存一个标志并检查其值以确定用户是否是新用户。如果没有,则不会出现欢迎屏幕:

SharedPreferences mPrefs;
final String welcomePref = "oldUser";
@Override
public void onCreate(Bundle savedInstanceState) {
    mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
    Boolean welcome = mPrefs.getBoolean(welcomePref, false);

    if (!welcome) {
        Intent intent = new Intent(this, welcomeScreenOne.class);
        startActivity(intent); //start the first welcome screen

        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomePref, true); //not a new user anymore
        editor.commit(); 
    }

}

welcomeScreenOne 活动启动第二个欢迎屏幕,依此类推。您可能已经注意到,此代码中的错误是,如果用户查看第一个欢迎屏幕,则首选项设置为 true,因此如果他在查看另一个欢迎屏幕(2、3 和 4)之前退出应用程序,那么返回应用程序将不会显示剩余的屏幕。

为了解决这个问题,我想startActivityForResult(Intent, int)在每个欢迎屏幕活动中使用,以便第 4 个返回到第 3 个,第 2 个返回到第 1 个欢迎屏幕,然后将首选项设置为true. 这是不好的编码习惯吗?

我的第二个解决方案是从主屏幕调用第一个屏幕,返回然后调用第二个,返回然后调用第三个等等。

也许有一种我不知道的方法,请指教?

标签: android

解决方案


这是不好的编码习惯吗?

恕我直言,是的。

也许有一种我不知道的方法,请指教?

进行一项活动,而不是四项活动。

在这个活动中使用其他内容作为您的欢迎屏幕序列,例如:


推荐阅读