#android #android-studio #android-layout #android-listview
#Android #android-studio #android-макет #android-listview
Вопрос:
Как динамически добавлять edittext в адаптер?
у меня есть адаптер, с помощью которого я создаю edittext для пользователя для динамического ввода данных.
я сохраняю весь созданный текст редактирования из Json, полученный с сервера, в списке. Теперь мне даже нужно предоставить дополнительный текст для редактирования, чтобы пользователь мог добавлять динамические / пользовательские данные при нажатии кнопки?
Как мне это сделать?
ArrayList<EditText> list = new ArrayList<>();
list.add(holder.editText);
Сначала я получу заголовок / подсказку для редактирования текста от пользователя, используя окно предупреждения, подобное этому:
addField.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
final AlertDialog.Builder alertDialog = new AlertDialog.Builder(context, R.style.AlertDialogStyle);
alertDialog.setMessage("");
final EditText input = new EditText(context);
input.setGravity(Gravity.CENTER);
input.setHint("Enter Title for custom field");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.MATCH_PARENT);
input.setLayoutParams(lp);
alertDialog.setView(input);
alertDialog.setIcon(R.drawable.logo);
alertDialog.setPositiveButton("Set",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
list.add(holder.editText); //**App Crashes while doing this**
}
});
alertDialog.setCancelable(false).show();
}
});
Edittext не добавляется в список, и приложение вылетает при нажатии на SET, из alertBox
Ответ №1:
Я думаю, вы должны предоставить хотя бы один EditText для фокусировки в XML. Затем в java вы можете создавать EditTexts и программно добавлять параметры и т. Д. Этот исходный код работал для меня:
EditText editText = new EditText(context);
editText.setLayoutParams(layoutParamsForEdittext);
editText.setBackground(context.getResources().getDrawable(R.drawable.bg_rounded_grey_border));
editText.setId(surveyAnswers.getId());
editText.setPadding(8, 8, 8, 8);
editText.setScrollContainer(true);
editText.setTextSize(16);
editText.setInputType(InputType.TYPE_CLASS_NUMBER);
editText.setFilters(new InputFilter[]{filter, new InputFilter.LengthFilter(10)});
editText.setGravity(Gravity.TOP);
editText.setHintTextColor(context.getResources().getColor(R.color.colorTextHint));
editText.setHint(surveyAnswers.getText());
linearLayoutShelfShareAnswer.addView(editText);
Комментарии:
1. Новый edittext в адаптере xml правильный? и что такое
linearLayoutShelfShareAnswer
?2. @Test Я сделал это в своем классе ViewHolder. Я создал новый EditText программно и linearLayoutShelfShareAnswer.addView(EditText); здесь я просто добавляю свой новый EditText в LinearLayout. linearLayoutShelfShareAnswer — это мой LinearLayout