确定应用程序是否从主屏幕启动?

时间:2011-04-07 14:06:29

标签: android

在我的主要活动中,onCreate我将textView设置为当前日期。从那个活动,我startActivityForResult activity2,我可以在那里更改日期。 onActivityResult,我将textView设置为返回的日期。

现在,如果您关闭主活动并且textView不是当前日期。下次打开它时(从主屏幕或应用程序抽屉上的按钮),我希望将textView设置为当前日期。

第一次打开后,下次打开它时,它不会打开onCreate。我尝试过使用onResume但是这会阻止activity2 onActivityResult更改日期。

2 个答案:

答案 0 :(得分:2)

尝试将日期值从activity2保存到android SharedPreferences。

您可以使用以下内容将日期设置为首选项:

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
SharedPreferences.Editor prefsEditor = myPrefs.edit();
prefsEditor.putString(MY_NAME, "Sai");
prefsEditor.putString(MY_WALLPAPER, "f664.PNG");
prefsEditor.commit();

你可以通过使用类似的东西来阅读偏好:

SharedPreferences myPrefs = this.getSharedPreferences("myPrefs", MODE_WORLD_READABLE);
String prefName = myPrefs.getString(MY_NAME, "nothing");
String wallPaper = myPrefs.getString(MY_WALLPAPER, null);

如果日期是从activty2设置的,则将“dateWasAlreadySet”之类的标记设置为SharedPreferences,这样您就知道日期已经设置。

伪代码:

If(SharedPreferences.dateWasAlreadySet){
    activity1.textField.text = SharedPreferences.get("myDate");
} else {
    activity1.textField.text = currentDate;
}

我希望你理解我的意思。

答案 1 :(得分:2)

这样的事情怎么样:

首先,创建一个onSaveInstanceState(Bundle)方法并将日期TextView的当前内容保存到该方法中。在Android停止,隐藏或销毁您的活动之前调用此方法。

当您启动activity2时,将调用您的onStop() activity1。在那里,设置一个标志以指示是否由于您启动新活动而调用onStop()(使activity2成为成员,而不是本地变量)。确保将此标记保存在activity1的onSaveInstanceState中。

在activity1中实现onRestoreInstanceState(Bundle),并将日期和标记值恢复为局部变量。

最后,在activity {的onResume中,检查标志 - 你要恢复,因为你从activity2返回,不要更改TextView,因为它将在onActivityResult中设置,否则,你可以安全地恢复保存的日期值。