0

我创建的应用程序仅显示用户在EditText.

这是它的onCreate方法MainActivity

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final EditText input = (EditText) findViewById(R.id.input);
    final TextView output = (TextView) findViewById(R.id.output);

    final Editable input_editable = (Editable) input.getText();

    final Button show = (Button) findViewById(R.id.show);
    final Button reset = (Button) findViewById(R.id.reset);


    show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String text = input_editable.toString();
            output.setText(text);
        }
    });


    reset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            input_editable.clear();
        }
    });
   }       

问题是这样的:

当我运行该应用程序时,一切正常:

  • 我输入例如“foo”并单击“显示”按钮,它显示“foo”,
  • 当我点击“重置”时,一切都被重置了,
  • 重新键入“bar”,然后显示“bar”。好的!

但是,当我只是换行

input_editable.clear();

对此

input.setText("");

然后在启动应用程序后发生这种情况:

  • 我输入例如“foo”并单击“显示”按钮,它显示“foo”,
  • 当我点击“重置”时,一切似乎都被重置了,
  • 重新键入“bar”,然后单击“show”后“foo”仍然存在

为什么?

谢谢

4

1 回答 1

0

input_editable 保存文本直到它被清除。它不能覆盖文本并始终保持最新文本。如果您每次都采用新的参考,那么您将获得您的期望值。

试试这个:

show.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                String text = input.getEditableText().toString();
                textView.setText(text);
            }
        });

每次在此处初始化引用,以便在应用它时获得预期的输出:

input.setText("");
于 2018-11-13T12:19:26.973 回答