При установке текста в TextView из элемента EditText отображается пустым - PullRequest
0 голосов
/ 03 мая 2019

У меня есть поле EditText для поля имени и кнопка. Когда я набираю имя в поле и нажимаю кнопку. Должно отображаться «Привет» + значение поля EditText.

Мое решение - getText (). ToString () для объекта EditText и передать его в строковую переменную. Но он возвращает "" всякий раз, когда я использую его для setText ().

Я использовал это вместо этого, и оно работает, но я запутался, в чем разница? 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 ("Привет, nametext.getText (). ToString ()); // возвращает фактическую строку, набранную в поле

nametext.setText («Привет» + input_msg); // возвращает ""

Ответы [ 2 ]

3 голосов
/ 03 мая 2019

Здравствуйте, вы делаете это правильно, просто маленькая ошибка, которую вы звоните getText() до Нажмите .

btn_show.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        input_msg = nametext.getText().toString();
        nametext.setText("Hi, " + input_msg); 
  }
 });
0 голосов
/ 03 мая 2019

Причина различия заключается в том, что при заполнении input_msg значение все еще остается пустым.Когда вы нажимаете кнопку после того, как строка заполнена, представление input_msg не изменилось.

Итак, вам нужно получить значение только при нажатии кнопки:

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

А если вы хотите использовать Java 8, это еще проще:

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