1

对于我的第一个 Android 应用程序,我(希望)完全按照developer.android.com上的教程进行操作。完成的应用程序有一个 EditText 视图,您可以在其中输入文本和一个 SEND 按钮,该按钮将打开一个新活动 (DisplayMessageActivity),该活动以大字体显示 EditText 中的文本。

我注意到关于 EditText 中文本的持久性的一些不一致的行为。假设我在那里输入了一些文本:

  • 当我点击手机底部的后退按钮并从图标重新启动应用程序时,我会丢失文本。

  • 当我点击手机底部的主页按钮并从图标重新启动应用程序时,我会保留文本。

  • 当我按下 SEND 按钮并通过手机底部的 Back 按钮离开 DisplayMessageActivity 时,我会保留文本。

  • 当我按下 SEND 按钮并通过操作栏中的箭头按钮离开 DisplayMessageActivity 时,我松开了文本。

谁能向我解释为什么行为不同以及在所有四种情况下我必须做些什么来保留文本?

4

1 回答 1

0

这是因为 android Life Cycle,在以下某些情况下,Activity 被销毁,因此编辑文本的值丢失,当您重新启动它时,会调用 onCreate 方法,但在其他情况下,Activity 被移到后堆栈,所以当您返回时Activity 调用 onResume 方法。

你可以看到下面的图片 android 生命周期:

在此处输入图像描述

您可以在此链接中阅读更多内容。

要在重新启动的情况下保存文本框的值,您可以。通过以下代码使用共享首选项:

在 Preference 中设置值:

// MY_PREFS_NAME - a static String variable like: 
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
 editor.putString("name", "Elena");
 editor.putInt("idName", 12);
 editor.apply();

从首选项中检索数据:

SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE); 
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.

您可以在此链接中阅读有关共享首选项的更多信息

于 2020-10-15T14:12:38.720 回答