#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();
}
Надеюсь, это поможет.