您好我正在练习df.toPandas().to_csv("sample_file.csv", header=True)
如何在活动创建和恢复中发挥作用。我试过这个:
Bundle savedInstanceState
首先private EditText mTextBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextBox = (EditText) findViewById(R.id.etName);
mTextBox.setText("hello");
if(savedInstanceState != null){
Toast.makeText(this, savedInstanceState.getString("name"),
Toast.LENGTH_SHORT).show();
mTextBox.setText(savedInstanceState.geteString("name"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("name", "Joe");
super.onSaveInstanceState(outState);
}
显然这会将onCreate()
字段设置为" hello"如果EditText
为空,则不会执行savedInstanceState
块。当我更改方向时if
遍历所有回调并在Activity
块中烘烤字符串,但是,它不会将if
设置为传递的mTextBox
值。Bundle
仍然设置为EditText
而不是hello
,但if块中的Joe
显示为Toast
。
有人能指出为什么这不符合我的期望吗?
由于
答案 0 :(得分:2)
这是TextView.getFreezesText
的结果,它将:
返回此文本视图是否包含其中的整个文本内容 冰冻的冰柱。 对于EditText,它始终返回true 。
来自TextView.setFreezesText
的更多信息:
控制此文本视图是否在何时保存其整个文本内容 冻结到冰柱,除了光标等动态状态 位置。默认情况下,这是false,不保存文本。设为true 如果文本视图中的文本没有保存在其他地方 持久存储(如在内容提供者中),以便视图 稍后解冻用户不会丢失他们的数据。 对于EditText,它是 始终启用,无论属性值。
icicles
指的是savedInstanceState
,这就是以前所说的。
如果您想自行保存和恢复文字,可以创建自定义EditText
并覆盖getFreezesText
,例如:
public class NonFreezingEditText extends AppCompatEditText {
public NonFreezingEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean getFreezesText() {
return false;
}
}
您也可以使用View.post
:
mTextBox.post(() -> mTextBox.setText(savedInstanceState.getString("name")));
或Activity.onRestoreInstanceState
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mTextBox.setText(savedInstanceState.getString("name"));
}
答案 1 :(得分:1)
你需要setText不同"你好"。见例子
animations
或者您必须覆盖onRestoreInstanceState。当文本没有改变时,不要调用onCreate。
private EditText mTextBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextBox = (EditText) findViewById(R.id.etName);
mTextBox.setText("hello");
if(savedInstanceState != null){
Toast.makeText(this, savedInstanceState.getString("name"),
Toast.LENGTH_SHORT).show();
mTextBox.setText(savedInstanceState.getString("name"));
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
mTextBox.setText("Joe");
outState.putString("name", mTextBox.getText().toString());
super.onSaveInstanceState(outState);
}