我打算向用户显示四个欢迎屏幕,仅对新用户显示一次。为此,我在启动时在首选项中保存一个标志,并检查其值以确定用户是否是新用户。如果没有,则不显示欢迎屏幕:
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活动启动第二个欢迎屏幕,依此类推。 您可能已经注意到,此代码中的错误是,如果用户查看第一个欢迎屏幕,则pref设置为true,因此如果他在查看其他欢迎屏幕(2,3和4)之前退出应用程序,那么返回应用程序将不会显示剩余的屏幕。
为了解决这个问题,我考虑在每个欢迎屏幕活动中使用startActivityForResult(Intent, int)
,以便第4个返回到第3个,返回第2个返回到第1个欢迎屏幕,然后将pref设置为{{1 }}。这是不好的编码实践吗?
我的第二个解决方案是从主要调用第一个屏幕,然后返回调用第二个屏幕,然后返回调用第三个屏幕,依此类推。
也许有一种方法我不知道,请指教?
答案 0 :(得分:2)
这是不好的编码习惯吗?
恕我直言,是的。
也许有一种方法我不知道,请指教?
有一项活动,而不是四项。
在这一个活动中使用其他内容作为欢迎屏幕序列,例如:
答案 1 :(得分:0)
您可以在应用中添加splashActivity吗?如果是,您可以检查该活动是否为新用户,如果是新用户,则显示欢迎屏幕,如果不是,则将其发送到您的mainActivity(或您需要的活动)。
答案 2 :(得分:0)
如果您将使用启动模式单一实例,则取决于您正在启动活动的活动模式,如果每次创建新实例时默认模式都将在那里重复打开,则会再次重新打开将堆积在堆栈中的活动可能会产生未知结果