繁体   English   中英

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

[英]hint text turns to real text in EditText after device rotation

我有一些提示文本的EditText视图。

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

如果用户之前写过一些文本-它会被覆盖。

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

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

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

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

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

从一本好书中我读到:

onSaveInstanceState(...)的默认实现要求所有活动的视图将其状态另存为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); }

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

我有完全一样的问题。 我正在将fragment添加到onCreate activity中,如下所示

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

因此,每当我旋转设备时,设备都面临与您提到的完全相同的问题,然后我仔细检查了一下,发现每个旋转片段上都添加了这个问题。

在我的情况下,解决方案是将add replace如下所示。 做完这个问题后就解决了。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM