[英]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.