【问题标题】:Saving State for EditText and Button Clicks保存 EditText 和按钮点击的状态
【发布时间】:2013-03-30 04:01:46
【问题描述】:

我有 2 个活动。第一个Activity 有EditText 和Next Button。第二个Activity 有一个Back Button。首先Activity 我在EditText 中输入了一些文本,然后我点击了Next Button。现在我在SecondActivity,如果我按Back Button,它将返回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);
        }
    });

}

  }

【问题讨论】:

  • 你必须为此使用 sharedprefrence
  • okayy.. 让我尝试使用 SharedPrefernce
  • 谢谢!它使用 SharedPreference 工作

标签: android button android-edittext android-button


【解决方案1】:

在这种特定情况下,当您想要保留 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 Acticity Stack 将显示上一个活动及其所有数据。

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

希望这会有所帮助..:)

【讨论】:

  • 谢谢!它的工作。我必须这样做吗? protected void onResume() { super.onResume(); SharedPreferences preferences = getSharedPreferences("my_prefs", 0); SharedPreferences.Editor editor = preferences.edit(); editor.putString("etValue", text.getText().toString()); editor.commit(); }
  • 太好了,给个提示...通常更喜欢在您的活动中创建两个方法,例如 saveActivityValues() 和 loadActivityValues(),并在需要时调用它们。当您在活动中保存和加载多个值时,它会变得很方便。在这种情况下,还可以在包含数据键名称的资源字符串上使用一些静态常量,例如“etValue”。一切都是为了让您的代码更具可读性和可管理性..:)
猜你喜欢
  • 2015-10-02
  • 2017-12-25
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多