Как правильно получить текст из Material Design TextInputLayout?

Я хочу получить текст из TextInputLayout материального дизайна, используя пользовательский значок конца.

Я пытался сделать это:

TextInputLayout textInputCustomEndIcon = findViewById(R.id.editText);
final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());

textInputCustomEndIcon
                .setEndIconOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View view) {
                                if (editText.getText() != null) {
                                    String text = editText.getText().toString();

                                    Log.i("MainActivity", "setEndIconOnClickListener:"+ text);
                                }
                            }
                            });

Но я получаю пустой текст, не нулевой, а пустой!!


person Ziad H.    schedule 05.09.2019    source источник
comment
У вас есть <TextInputEditText> в <TextInputLayout> в вашем макете XML?   -  person Mike M.    schedule 05.09.2019


Ответы (2)


Используя что-то вроде этого:

<com.google.android.material.textfield.TextInputLayout
    android:id="@+id/custom_end_icon"
    ...>

    <com.google.android.material.textfield.TextInputEditText
       ../>

</com.google.android.material.textfield.TextInputLayout>

Просто используйте:

TextInputLayout textInputLayout = findViewById(R.id.custom_end_icon);
String text = textInputLayout.getEditText().getText();

Ваша проблема здесь:

final TextInputEditText editText = new TextInputEditText(textInputCustomEndIcon.getContext());

Вы только создаете новый экземпляр TextInputEditText, это не TextInputEditText внутри TextInputLayout.

person Gabriele Mariotti    schedule 05.09.2019
comment
Есть ли способ получить/получить доступ к TextInputLayout из TextInputEditText внутри упомянутого TextInputLayout, что-то вроде editText.getTextInputLayout? - person LuckMan; 01.11.2020
comment
getText() возвращает редактируемый. Вы должны вызвать getText().toString(). Я не знаю, почему вы используете getEditText() в макете. Я использую TextInputEditText напрямую: ((TextInputEditText)getView().findViewById(R.id.etTheText)).getText().toString(). - person The incredible Jan; 01.12.2020

У меня была такая же проблема, как у вас. Я просто решил это так. В переменной String мне нужно проверить правильность вставки данных с помощью .trim()

  String vname=Name.getEditText().getText().toString().trim();
person cypherpunk5    schedule 18.05.2020
comment
Вы ничего не подтверждаете. Вы просто обрезаете свою строку. - person The incredible Jan; 01.12.2020