【问题标题】:Edit button in application doesn't save when edited编辑时应用程序中的编辑按钮不保存
【发布时间】:2025-12-31 03:30:09
【问题描述】:

我的应用程序在 Android Studio 中的EditButton 可以编辑,但是一旦你编辑了文本,当你退出窗口时它不会保存。该怎么办?

 public class BellPepperActivity extends AppCompatActivity {

    TextView bpTextView;
    AlertDialog dialog;
    EditText editText;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_bell_pepper);

        bpTextView = (TextView) findViewById(R.id.bpTextView);
        dialog = new AlertDialog.Builder(this).create();
        editText = new  EditText(this);
        dialog.setTitle("BELL PEPPER");

        dialog.setView(editText);

        dialog.setButton(DialogInterface.BUTTON_POSITIVE, "SAVE", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                bpTextView.setText(editText.getText());
            }
        });

        bpTextView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                editText.setText(bpTextView.getText());
                dialog.show();
            }
        });


    }
}

【问题讨论】:

  • 你到底想做什么?
  • 当我编辑退出窗口或应用程序时将发送的文本时,在我的情况下,文本可以编辑,但一旦您退出窗口进行编辑,您编辑的文本将返回原始文字
  • 使编辑文本最终化,然后从编辑文本中访问值。这将对您有所帮助:*.com/questions/18799216/…

标签: android


【解决方案1】:

通过窗口,我假设您是 Activity(您创建的 AppCompatActivity)。要在活动中保持状态,您必须了解activity lifecycle。基本上,当您离开时,您必须保存实例状态:

// invoked when the activity may be temporarily destroyed, save the instance state here
@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString(TEXT_VIEW_KEY, editText.getText());

    // call superclass to save any view hierarchy
    super.onSaveInstanceState(outState);
}

当你恢复状态时,你也会这样做:

// 仅当之前使用保存的实例存在时调用此回调 // onSaveInstanceState()。我们在 onCreate() 中恢复一些状态,同时我们可以选择恢复

// other state here, possibly usable after onStart() has completed.
// The savedInstanceState Bundle is same as the one used in onCreate().
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    editText.setText(savedInstanceState.getString(TEXT_VIEW_KEY));
}

显然,您必须在班级顶部创建一个 TEXT_VIEW_KEY 作为私有最终字符串:

private static final String TEXT_VIEW_KEY = "TEXT_VIEW_KEY";

未经测试,但现在应该对您有用。要了解更高级的生命周期处理,请了解 Android Architecture Components,但这应该等到您了解 android App 中的基本活动生命周期。

【讨论】: