因此,在活动1中,我单击了一个按钮,将我带到活动2.在活动2中,我将一些数据输入到EditText中。当我按下手机上的后退按钮时,它会将我带到活动1,这是正确的但如果我再次点击活动1按钮,我输入EditText的任何文本都消失了。我确信这是因为每次按下按钮我都会启动一个新的Intent,我认为我需要使用Flags,但我不确定。下面是我的基本MainActivity1和MainActivity2,没有我尝试过的代码无效。
**编辑:退出应用程序后,需要删除所有已保存的数据。
MainActivity1
public class MainActivity extends Activity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button)findViewById(R.id.button2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this,MainActivity2.class);
startActivity(i);
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
MainActivity2
public class MainActivity2 extends Activity {
EditText et1;
@Override
protected void onCreate(Bundle outState) {
super.onCreate(outState);
setContentView(R.layout.activity_main_2);
et1 = (EditText)findViewById(R.id.editText1);
}
}
}
提前谢谢。
答案 0 :(得分:5)
试试这个 在MainActivity2中复制这些代码,它将保存您的数据(即您的EditText数据)
public class MainActivity2 extends Activity {
EditText et1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_2);
et1 = (EditText)findViewById(R.id.editText1);
loadSavedPreferences();
}
private void loadSavedPreferences() {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
et1.setText(sharedPreferences.getString("string_et1",""));
}
private void savePreferences(String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
public void saveData(){
savePreferences("string_et1", et1.getText().toString());
}
@Override
public void onBackPressed(){
saveData();
super.onBackPressed();
}
}
如果要在退出应用程序时删除首选项,请在MainActivity1中尝试此操作。
public class MainActivity extends Activity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1 = (Button)findViewById(R.id.button2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent i = new Intent(MainActivity.this,MainActivity2.class);
startActivity(i);
}
});
}
@Override
public void onBackPressed() {
clear_pref();
}
public void clear_pref(){
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(this);
Editor editor = sharedPreferences.edit();
editor.clear();
editor.commit();
}
}
答案 1 :(得分:1)
您必须在onBackPressed()
某处保存数据。我建议使用Preferences
:
public class MainActivity2 extends Activity {
EditText et1;
@Override
protected void onCreate(Bundle outState) {
super.onCreate(outState);
setContentView(R.layout.activity_main_2);
et1 = (EditText)findViewById(R.id.editText1);
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if(!TextUtils.isEmpty(restoredText)){
et1.setText(restoredText);
}
}
@Override
protected void onBackPressed(){
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("text", et1.getText().toString());
editor.commit();
super.onBackPressed();
}
}
答案 2 :(得分:0)
首先,您需要了解通过按下活动上的后退按钮意味着它被明确销毁,因此在更改方向的情况下操作系统提供的saveInstanceState机制不是一个选项,但是您始终可以继续android允许存储值的持久性机制,我建议你将值存储在SharedPreferences上,然后在重新启动活动后将其填充回编辑文本...
希望这有帮助。
问候!
答案 3 :(得分:0)
答案 4 :(得分:0)
编写代码以在onDestroy函数的edittext中保存文本,您将不得不覆盖它。 并在再次创建活动时(在onCreate方法中),检索数据并在EditText中填充。 要保存数据,请使用SharedPreference。 见shared preference example 和this