0

我需要填写表格并按“返回”按钮将其保存到偏好设置中。甚至将其显示给 Log。

问题是当我使用onBackPressed()- 活动从 XML 中返回onPause()myEditText.getText().toString()返回结果,而不是实际在myEditText字段中的结果。同样的事情onDestroy()

当然,如果我挂起someButton.onClickListener()它,它可以很好地保存我的数据,myEditText因为 Activity 不会去onPause()并且不会从 XML 中获取结果,但是我需要通过按下后退按钮来准确地保存它。

代码是基本的:

    EditText etCompetitionName;
Competition competition;
etCompetitionName=(EditText) findViewById(R.id.etCompetitionName);
 Intent intent=getIntent();//I get number of object to work with
pos=intent.getIntExtra("pos", -1); // this is this number
  competition=getObject(pos);// well, this is loading this object
 olDetCompetitionName=competition.getName();//getting name from loaded object
          etCompetitionName.setText(olDetCompetitionName);//set this text to EditText field
...
then :

protected void onDestroy() {
    super.onDestroy();
//try to save

competition.setName(etCompetitionName.getText().toString());
        saveObject(competition);
}    

因此,它保存了旧值,即我在开始时设置的值。如果我不设置它 - 它将从布局 xml 中获取。这是onPause()我需要避免它的问题。

4

2 回答 2

2

您的问题很令人困惑,但是如果您覆盖onBackPressed(),您可以获得数据。

@Override
public void onBackPressed()
{
     String text = myEditText.getText().toString();
     // save text
     super.onBackPressed();
}

我知道你说过你这样做了,但如果这不起作用,请展示你是如何做到的。这会将用户输入的任何内容放入text变量中,然后您可以将其保存在SharedPreferences任何您想要的位置。

如果你想保存它,你也可以做同样的事情onPause(),比如说,有其他东西出现在前台。

于 2013-11-10T14:04:05.703 回答
0

SecondActivity.Java -> 我在 SharedPReference 中保存了两个 edittext 值并调用了 MainActivity 意图

@Override
public void onBackPressed() {
    // TODO Auto-generated method stub
    SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    Editor editor = sharedPreferences.edit();
    editor.putString("1", a.getText().toString());
    editor.putString("2", b.getText().toString());
    editor.commit();
    Intent i = new Intent(SecondActivity.this,MainActivity.class);
    SecondActivity.this.startActivity(i);
}

MainActivity.Java -> 我有一个按钮监听器来显示一个带有来自 sharedpreference 的值的 Toast。

show.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            SharedPreferences pref= PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            String  a = pref.getString("1", "") ;
            String b = pref.getString("2", "");
            Toast.makeText(getApplicationContext(),a+"  "+b, Toast.LENGTH_LONG).show();
        }
    });
于 2013-11-10T14:36:11.013 回答