Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 设备旋转后,提示文本在EditText中变为真实文本_Java_Android_Android Edittext - Fatal编程技术网

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

Java 设备旋转后,提示文本在EditText中变为真实文本,java,android,android-edittext,Java,Android,Android Edittext,我有一个带有提示文本的EditText视图 当设备旋转时,提示变为真实文本 如果用户以前写过一些文本-它将被覆盖 我怎样才能改变这种行为?停止将提示转换为文本?这与跨旋转保存数据有关。基本上,您的数据在轮换时被销毁 要解决此问题,您需要保存运行时配置更改(本例中为旋转)期间的数据 一种方法是覆盖活动中的onSaveInstanceState(Bundle outState) 我上面描述的方法是在onPause()onStop()和onDestroy()之前调用的 我从一本好书中读到: onSav

我有一个带有提示文本的EditText视图

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

如果用户以前写过一些文本-它将被覆盖


我怎样才能改变这种行为?停止将提示转换为文本?

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

要解决此问题,您需要保存运行时配置更改(本例中为旋转)期间的数据

一种方法是覆盖活动中的
onSaveInstanceState(Bundle outState)

我上面描述的方法是在
onPause()
onStop()
onDestroy()之前调用的

我从一本好书中读到:

onSaveInstanceState(…)的默认实现要求所有活动的视图 将其状态另存为Bundle对象中的数据。Bundle是将字符串键映射到 某些有限类型的值 你以前见过这个包裹。它被传递到onCreate(Bundle)

@覆盖
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//
}

重写onCreate(…)时,调用活动的超类上的onCreate(…)并传递 在你刚收到的包裹里。在超类实现中,视图的保存状态为 已检索并用于重新创建活动的视图层次结构

这是最酷的部分

您需要重写onSavedInstanceState以将其他数据保存到捆绑包中,然后在
onCreate()
方法中读取该数据

所以,无论您希望在整个旋转过程中保存什么数据,都需要将该数据添加到此捆绑包中

像这样做

添加一个常量,该常量将作为密钥存储在捆绑包中

private静态最终字符串MY_KEY=“MY KEY”

然后重写
onSaveInstanceState()
,以常量
MY_KEY
作为键将数据的值写入捆绑包

@覆盖
SaveInstanceState上的公共无效(Bundle savedInstanceState){
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(我的_键,你在旋转中不断丢失的数据都在这里!!!!!);
}

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

if(savedInstanceState!=null){
keeplosing=savedInstanceState.getInt(MY_键,0);

}

如果您也像我一样,发布一些格式,作为答案,可能会有所帮助

我也有同样的问题。我在
onCreate
中将
fragment
添加到
activity
中,如下所示

fragmentTransaction.add(R.id.fragment, fragment, tag);
因此,每当我旋转设备时,都会遇到与您提到的完全相同的问题,然后我进行了双重检查,发现每个旋转片段都会被添加

在我的案例中,解决方案是用
replace
替换
add
,如下所示。做了这件事之后,问题就解决了

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

你能发布你的代码吗?