android - 如果我递归调用 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
. 这是不好的编码习惯吗?
我的第二个解决方案是从主屏幕调用第一个屏幕,返回然后调用第二个,返回然后调用第三个等等。
也许有一种我不知道的方法,请指教?
解决方案
推荐阅读
- javascript - 如何创建获取数据的发布请求
- spring-boot - 在 Kafka 流处理中聚合时使用提供的主题进行更改日志和重新分区
- python-3.x - 向 django apps.py 添加额外的元数据并从其他应用程序访问它
- associativity - C 关联性中的 aperands 的歧义
- excel - 排序时将行保持在一起
- r - 在 dplyr 中使用变量而不是变量名
- pytorch - 为什么我的深度神经网络在全连接层中使用 softmax 而不是在全连接层中使用 softmax 而下降缓慢?
- excel - 如何在一个excel表中查看另一个excel表中的记录,将一张表作为所有人的模板?
- macos - 如何在 mac os 中跳过或禁用浏览器的 SSL 检查?
- php - Laravel 比较插入的列和同一行中的另一列