Как получить и установить значение строки представления?

#android

#Android

Вопрос:

Я создаю приложение, похожее на форму Google, которое извлекает данные из API и соответствующим образом отображает представление. У меня есть этот API в виде ответа JSON.

 {"type":"input","label":"Email Address","inputType":"email","name":"email","validations":[{"name":"required","message":"Email Required"}}
  

Несколько раз.
Затем, соответственно, я программно рисую представление.

Теперь я хочу получить текст из этой edittext строки.

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

Для приведенного выше ответа Api я вызываю этот метод.

   private void makeInputField(final Model model) {
        editText = new TextInputEditText(context);
        LinearLayout.LayoutParams editTextParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT);

        TextInputLayout textInputLayout = new TextInputLayout(context);
        LinearLayout.LayoutParams textInputLayoutParams = new LinearLayout.LayoutParams(
                LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.WRAP_CONTENT);

        textInputLayout.setLayoutParams(textInputLayoutParams);
        textInputLayout.addView(editText, editTextParams);
        if (model.getValidationName().equals("required")) {
            textInputLayout.setHint(model.getLabel()   "*");
        } else {
            textInputLayout.setHint(model.getLabel());

        }
        editTextParams.setMargins(16, 16, 16, 16);
        linearLayout.addView(textInputLayout);

        editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    if (model.getValidationName().equals("required") amp;amp; editText.getText().toString().isEmpty() || !isValidEmail(editText.getText().toString())) {
                        editText.setError(model.getValidationMsg());
                    }
                }
            }
        });
  

Несколько раз.

Теперь, если я проверю, является ли условие электронной почты действительным или нет, и установлю ошибку, тогда оно всегда будет указывать на последнее сделанное мной представление.

 //this will point out the last view
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                if (!hasFocus) {
                    if (model.getValidationName().equals("required") amp;amp; editText.getText().toString().isEmpty() || !isValidEmail(editText.getText().toString())) {
                        editText.setError(model.getValidationMsg());
                    }
                }
            }
        });
  

Комментарии:

1. опубликуйте минимальный код, который вы использовали.

2. Что вам нужно, сэр?

3. можете ли вы показать код?

4. мое предложение, и, конечно, его можно улучшить, заключается в том, что вы сохраняете array все созданные вами представления, а затем при сохранении или публикации получаете данные iterate через массив и получаете текст.

5. @AbdulKawee, я взял здесь только одно представление, например, у меня их много в моем приложении, таких как панель поиска, кнопки и другие

Ответ №1:

Один из способов сделать это — вести учет количества views , например EditText , таких

 ArrayList<View> arr = new ArrayList<View>();
  

и теперь, когда вы заполняете представление, просто добавьте представление в массив

 linearLayout.addView(textInputLayout);
arr.add(textInputLayout);
  

Теперь просто реализуйте свою логику, если вы хотите добавить все тексты в один string или снова сделать array для этого что-то вроде

 String result = "";
for (View items : arr){
            if (items instanceof EditText)
                result  = ((EditText) items) .getText();
        }
  

Надеюсь, это поможет.