保存状态为的EditText和按钮点击 [英] Saving State for EditText and Button Clicks
问题描述
我有2个活动。首页活动
的的EditText
和下一个按钮
。第二个活动
有一个后退按钮
。在首页活动
我输入了一些文本在的EditText
和我打下一个按钮
。现在,我在 SecondActivity
,如果我preSS 后退按钮
将返回到第一个活动
结算的EditText
字段。我想那的EditText
字段保持不变。如何实现这些步骤?
FirstActivity:
公共类HomeActivity延伸活动{
文字的EditText;
Button按钮;@覆盖
保护无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.activity_home);
文字=(EditText上)findViewById(R.id.editText1);
按钮=(按钮)findViewById(R.id.button1);
button.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
意图I =新意图(HomeActivity.this,Second.class);
startActivity(ⅰ);
}
});
} @覆盖
保护无效的onSaveInstanceState(捆绑outState){
// TODO自动生成方法存根
super.onSaveInstanceState(outState); CharSequence的序列= text.getText();
outState.putCharSequence(savedText序列);
} @覆盖
保护无效onRestoreInstanceState(捆绑savedInstanceState){
// TODO自动生成方法存根
super.onRestoreInstanceState(savedInstanceState);
CharSequence的序列= savedInstanceState.getCharSequence(savedText);
text.setText(序列); }
}
SecondActivity:
公共类二扩展活动{
按钮B;/ **当第一次创建活动调用。 * /
@覆盖
公共无效的onCreate(捆绑savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.second);
B =(按钮)findViewById(R.id.button_back);
b.setOnClickListener(新View.OnClickListener(){ @覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
意图I =新意图(Second.this,HomeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(ⅰ);
}
});} }
在这种特殊情况下,当你想留住你的MainActivity的值,你只需要完成SecondActivity,而不是像创建HomeActivity新意图p>
@覆盖
公共无效的onClick(视图v){
// TODO自动生成方法存根
//意图I =新意图(Second.this,HomeActivity.class);
//i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// startActivity(ⅰ);
//只是完成本(SecondActivity)活动
完();
}
这将perminently关闭第二个活动,而Android Acticity堆栈将显示previous活动及其所有数据。
在更复杂的场景,当你有活动之间复杂的导航和仍然希望在数据领域的挽留,你需要使用的共享preferances 的,保存当你想(idealy导航到其他活动时)的数据,然后重新装入(在onResume())当你回来这项活动。
希望这有助于..:)
I have 2 Activities. First Activity
has EditText
and Next Button
. Second Activity
has one Back Button
. In First Activity
I entered some texts in EditText
and I hit Next Button
. Now I'm in SecondActivity
, If I press Back Button
it will return to First Activity
clearing the EditText
fields. I want that EditText
field to remain same. How to achieve these steps?
FirstActivity:
public class HomeActivity extends Activity {
EditText text;
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
text = (EditText) findViewById(R.id.editText1);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(HomeActivity.this,Second.class);
startActivity(i);
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
CharSequence sequence = text.getText();
outState.putCharSequence("savedText", sequence);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
CharSequence sequence = savedInstanceState.getCharSequence("savedText");
text.setText(sequence);
}
}
SecondActivity:
public class Second extends Activity {
Button b;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.second);
b = (Button) findViewById(R.id.button_back);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent i = new Intent(Second.this, HomeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
}
}
In this specific case, when you want to retain the values of your MainActivity, you just need to finish the SecondActivity instead of creating new intent for HomeActivity like
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//Intent i = new Intent(Second.this, HomeActivity.class);
//i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
//startActivity(i);
//JUST FINISH THIS (SecondActivity) ACTIVITY
finish();
}
This will close the second activity perminently, and Android Acticity Stack will show the previous activity with all its data.
In the more complex scenarios, when you have complex navigation between activities and still want data to retain in fields, you need to use SharedPreferances, save data when you want (idealy when navigating to other activity) and load again (in onResume()) when you get back to this activity.
Hope this helps..:)
这篇关于保存状态为的EditText和按钮点击的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!