我有一个TextView,里面有一些文字。下面是EditText,它通过按下按钮来更改TextView字段。当我回到上一张卡并返回到我更改文本的卡片时,之前更改的文本未保存。我希望TextView中已更改的文本永久存在,直到下一次编辑。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.change_url);
button1 = (Button) findViewById(R.id.button9);
button2 = (Button) findViewById(R.id.button10);
devices = (TextView) findViewById(R.id.textView);
buildings = (TextView) findViewById(R.id.textView4);
ed1 = (EditText) findViewById(R.id.devices);
ed2 = (EditText) findViewById(R.id.buildings);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String niu = ed1.getText().toString();
devices.setText(niu);
}
});
}
我见过很多使用SharedPreferences和onSaveInstanceState,onRestoreInstanceState的帖子,但我不知道如何正确使用它们。有人可以让我的代码在开始时描述结果吗?我已经坐了很久没有效果了
在回答后,我编辑了这样的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.change_url);
button1 = (Button) findViewById(R.id.button9);
button2 = (Button) findViewById(R.id.button10);
devices = (TextView) findViewById(R.id.textView);
buildings = (TextView) findViewById(R.id.textView5);
ed1 = (EditText) findViewById(R.id.devices);
ed2 = (EditText) findViewById(R.id.buildings);
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String niu = ed1.getText().toString();
devices.setText(niu);
}
});
button2.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
String niu2 = ed2.getText().toString();
devices.setText(niu2);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("TEXT", (String) devices.getText());
outState.putString("TEXT2", (String) buildings.getText());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
devices.setText(savedInstanceState.getString("TEXT"));
buildings.setText(savedInstanceState.getString("TEXT2"));
}
它不起作用?
答案 0 :(得分:2)
在您的情况下,您必须使用共享首选项或在全局变量中存储值。确保你掌握了activity life cycle。
使用SharedPreferences:
public void saveStringInSharedPreferences(String text) {
// Retrieve the default shared preferences instance available to full application
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
sharedPreferences.edit().putString("KEY", "VALUE").commit();
}
检索已保存的值:
sharedPreferences.getString("KEY", "DEFAULT_VALUE");
使用onSaveInstanceState :(这不是您必须使用的上述要求)
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("TEXT", (String) textView.getText());
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
textView.setText(savedInstanceState.getString("TEXT"));
}
但在使用onSaveInstanceState之前,请先阅读documentation。