问题描述
我了解到,当应用程序即将停止或终止时,Android 会自动保存 EditText 对象的内容.但是,在我的应用中,当屏幕方向改变时,EditText 的内容会丢失.
I read that Android automatically saves the content of EditText objects when an application is about to be stopped or killed. However, in my app the content of an EditText is lost when screen orientation changes.
这是正常行为吗?然后我是否必须使用 onSaveInstanceState/onRestoreInstanceState 手动保存/恢复其内容?或者有没有更简单的方法告诉Android保存它并恢复它?
Is it normal behaviour? Do I then have to manually save/restore its content with onSaveInstanceState/onRestoreInstanceState? Or is there an easier method to tell Android to save it end restore it?
编辑:
我以编程方式创建 EditText 对象,而不是在 XML 中.事实证明这与问题有关(请参阅下面接受的答案).
I create the EditText object programmatically, not in XML. This turns out to be related to the problem (see accepted answer below).
推荐答案
这不是正常行为.
首先,确保您在布局 XML 中为 EditText 控件分配了 ID.
First and foremost, ensure that you have IDs assigned to your EditText controls in the layout XML.
它只需要一个ID,句号.如果您以编程方式执行此操作,除非它有 ID,否则它将丢失状态.
Edit 1: It just needs an ID, period. If you're doing this programmatically, it will lose state unless it has an ID.
因此,将其用作快速 &肮脏的例子:
So using this as a quick & dirty example:
// Find my layout
LinearLayout mLinearLayout = (LinearLayout) findViewById(R.id.ll1);
// Add a new EditText with default text of "test"
EditText testText = new EditText(this.getApplicationContext());
testText.setText("test");
// This line is the key; without it, any additional text changes will
// be lost on rotation. Try it with and without the setId, text will revert
// to just "test" when you rotate.
testText.setId(100);
// Add your new EditText to the view.
mLinearLayout.addView(testText);
这会解决你的问题.
如果失败,您需要自己保存和恢复状态.
Should that fail, you'll need to save and restore state yourself.
像这样覆盖 onSaveInstanceState:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("textKey", mEditText.getText().toString());
}
然后在OnCreate中恢复:
public void onCreate(Bundle savedInstanceState) {
if(savedInstanceState != null)
{
mEditText.setText(savedInstanceState.getString("textKey"));
}
}
另外,请不要使用 android:configChanges="orientation" 来尝试完成此操作,这是错误的方法.
Also, please don't use android:configChanges="orientation" to try to accomplish this, it's the wrong way to go.
这篇关于EditText 不会在屏幕方向更改时自动保存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)