可编辑对象和EditText文本属性之间的关系

时间:2018-11-13 11:13:44

标签: android android-edittext android-editable

我创建的应用仅显示用户在EditText中输入的内容。

这是其onCreate的{​​{1}}方法:

MainActivity

问题是这样的:

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

  • 我输入例如“ foo”,然后单击“显示”按钮,它显示“ foo”,
  • 当我单击“重置”时,所有内容都将重置,
  • 重新输入“ bar”,然后显示“ bar”。很好!

但是,当我只是换行时

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

对此

input_editable.clear();

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

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

为什么?

谢谢

1 个答案:

答案 0 :(得分:0)

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

只需尝试:

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

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

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

input.setText("");