将文本从 EditText 元素设置为 TextView 显示空白

Setting text to TextView from EditText element shows blank

我有一个用于名称字段的 EditText 字段和一个按钮。当我在字段中键入名称并按下按钮时。它应该显示 "Hi, " + EditText 字段的值。

我的解决方案是在 EditText 对象上调用 getText().toString() 并将其传递给字符串变量。但它 returns "" 每当我用它来设置文本()时。

我改用了它并且它有效但我很困惑有什么区别? nametext.setText("嗨,nametext.getText().toString());

Button btn_show;
EditText nametext;
String input_msg;

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

    nametext = findViewById(R.id.name_text);
    input_msg = nametext.getText().toString();

    btn_show = findViewById(R.id.hi);

    btn_show.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            nametext.setText("Hi, " + input_msg);  // this returns ""

        /* when i use nametext.getText().toString() in place of input_msg
        /* it returns the string I typed in the edittext. What's the 
        /* difference?
        /* nametext.setText("Hi,nametext.getText().toString()); // returns the actual string I typed in the edittext field

        }
    });
}

nametext.setText("Hi,nametext.getText().toString()); // returns 在字段中键入的实际字符串

nametext.setText("Hi, " + input_msg); // returns ""

您好,您的做法是正确的,只是您在 Click.

之前调用 getText() 时犯了一个小错误
btn_show.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        input_msg = nametext.getText().toString();
        nametext.setText("Hi, " + input_msg); 
  }
 });

存在差异的原因是当您填充 input_msg 时,该值仍然为空。当您在字符串填充视图后单击按钮时,input_msg 没有改变。

所以你需要做的是只在点击按钮时获取值:

btn_show.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        nametext.setText("Hi, " + nametext.getText().toString()); 
    }
});

而如果要用Java8,就更简单了:

btn_show.setOnClickListener((View.OnClickListener) v -> nametext.setText("Hi, " + nametext.getText().toString()));