Android 保存编辑文本和按钮单击的状态

Android 保存编辑文本和按钮单击的状态,android,button,android-edittext,android-button,Android,Button,Android Edittext,Android Button,我有两项活动。第一个活动具有编辑文本和下一步按钮。第二个活动有一个后退按钮。在第一个活动中我在编辑文本中输入了一些文本,然后点击了下一步按钮。现在我处于SecondActivity,如果我按下Back按钮,它将返回到First Activity清除EditText字段。我希望EditText字段保持不变。如何实现这些步骤 第一项活动: public class HomeActivity extends Activity { EditText text; Button button; @Over

我有两项活动。第一个
活动
具有
编辑文本
下一步按钮
。第二个
活动
有一个
后退按钮
。在第一个
活动中
我在
编辑文本
中输入了一些文本,然后点击了
下一步按钮
。现在我处于
SecondActivity
,如果我按下
Back按钮
,它将返回到
First Activity
清除
EditText
字段。我希望
EditText
字段保持不变。如何实现这些步骤

第一项活动:

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);

 }
}
第二项活动:

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);
        }
    });

}

  }

在这种特定情况下,当您想要保留MainActivity的值时,您只需要完成SecondActivity,而不是为HomeActivity创建新的意图,如

@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();
}
这将永久关闭第二个活动,Android activity Stack将显示前一个活动及其所有数据

在更复杂的场景中,当您在活动之间进行复杂的导航并且仍然希望数据保留在字段中时,您需要使用、在需要时保存数据(最好是在导航到其他活动时)并在返回此活动时再次加载(在onResume()中)


希望这能有所帮助:)

你必须使用SharedPreference来做这件事。。让我试试使用SharedPrefernceThanks!它使用SharedReferenceHanks工作!它起作用了。我必须这样做,对吗<代码>受保护的void onResume(){super.onResume();SharedReferences首选项=GetSharedReferences(“my_prefs”,0);SharedReferences.Editor编辑器=首选项.edit();Editor.putString(“etValue”,text.getText().toString());Editor.commit();}太好了,让我们有一个提示…通常最好在活动中创建两个方法,如saveActivityValues()和loadActivityValues(),并在需要时调用它们。当您在活动中有多个值要保存和加载时,它会变得很方便。在保存数据键名称的资源字符串上也使用一些静态常量,如本例中的“etValue”。所有这些都是为了使您的代码更加可读和易于管理……)