设备旋转后,提示文本在EditText中变为真实文本

时间:2014-05-04 09:23:42

标签: java android android-edittext

我有一个带有一些提示文字的EditText视图。

当设备旋转时,提示变为真实文本。

如果用户之前已经写过一些文字 - 它被覆盖了。

如何更改行为?停止提示变成文本?

2 个答案:

答案 0 :(得分:0)

这与跨旋转保存数据有关。基本上,您的数据会在轮换时被销毁。

要解决此问题,您需要保存运行时配置更改中的数据(在这种情况下为旋转)。

执行此操作的一种方法是覆盖活动中的onSaveInstanceState(Bundle outState)

我在onPause() onStop()onDestroy()

之前调用上述方法

我从一本好书中读到:

onSaveInstanceState(...)的默认实现会询问所有活动的视图 将其状态保存为Bundle对象中的数据。 Bundle是一种将字符串键映射到的结构 某些有限类型的值 你以前见过这个Bundle。它被传递到onCreate(Bundle)

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // }

当你覆盖onCreate(...)时,你在活动的超类上调用onCreate(...)并传递 在你刚收到的捆绑中。在超类实现中,视图的保存状态是 检索并用于重新创建活动的视图层次结构。

这是很酷的部分..

您需要覆盖onSavedInstanceState以将其他数据保存到您的包中,然后使用onCreate()方法重新读取该数据。

因此,无论您想要在旋转中保存哪些数据,都需要将该数据添加到此捆绑包中。

这样做..

添加一个常量,该常量将作为将存储在包中的键。

private static final String MY_KEY = "My Key";

然后覆盖onSaveInstanceState()以将常量MY_KEY作为关键字将数据值写入包中。

@Override public void onSaveInstanceState(Bundle savedInstanceState) { super.onSaveInstanceState(savedInstanceState); savedInstanceState.putInt(MY_KEY, YOUR DATA THAT YOU KEEP LOSING ON ROTATION GOES HERE!!!!!); }

最后在onCreate检查此值,如果存在则将其分配给您的变量。

if (savedInstanceState != null) { TheTextThatYouKeepLosing = savedInstanceState.getInt(MY_KEY, 0); }

答案 1 :(得分:0)

如果您的操作方式与我相同,可能会有所帮助,并发布答案以进行一些格式化。

我遇到了完全相同的问题。我正在将fragment添加到activity中的onCreate中,如下所示:

fragmentTransaction.add(R.id.fragment, fragment, tag);

由于这一点,每当我旋转设备时都遇到与您提到的完全相同的问题,然后我仔细检查并发现每个旋转片段上都添加了这个问题。

就我而言,解决方案是将add替换为replace,如下所示。完成此问题后,问题得到解决。

fragmentTransaction.replace(R.id.toDoFragment, fragment, tag);