【问题标题】:Android Java - saving EditText's text when user presses "back"Android Java - 当用户按下“返回”时保存 EditText 的文本
【发布时间】:2013-11-10 13:58:13
【问题描述】:

我需要填写表格并按“返回”按钮将其保存到首选项中。 甚至将其显示给 Log。

问题是当我使用 onBackPressed() 时 - 活动转到 onPause() 并且 myEditText.getText().toString() 从 XML 返回结果,而不是实际在 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() 的问题,我需要避免它。

【问题讨论】:

  • 将编辑文本保存在onPause() 中有效。 “来自 xml 的结果”是什么意思?另外,请在问题中包含相关代码。
  • 顺便说一句,您可以在使用 TextWatcher 按下按钮时保存文本。
  • laalto,我编辑了 - 这是我的部分代码

标签: android android-edittext gettext


【解决方案1】:

您的问题很混乱,但如果您覆盖onBackPressed(),您可以获得数据。

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

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

如果您希望在前台出现其他内容时保存它,您也可以在 onPause() 中执行相同的操作。

【讨论】:

  • 不要尝试保存在onDestroy()。正如我在帖子中所说,根据您的需要使用onPause()onBackPressed()
  • 我刚刚尝试了onDestroy,onBackPressed() - 结果是一样的,我只是实验了
  • “结果”到底是什么?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 2010-09-17
    相关资源
    最近更新 更多