#java #android
#java #Android
Вопрос:
Я пытаюсь реализовать список edittext внутри listview. Я успешно добавил это, добавив динамически view внутри вертикального linearlayout. Теперь мне нужно получить значения из каждого значения edittext из каждого основного элемента списка. Пожалуйста, проверьте изображение ниже
Ниже приведен код, который я использую для добавления динамического edittext в вертикальное линейное представление
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView != null){
return convertView;
}
convertView = LayoutInflater.from(context).inflate(R.layout.item,parent,false);
final LinearLayout subItem = convertView.findViewById(R.id.lvSubItem);
subItem.removeAllViews();
for (final Faltu faltu : posms.get(position).getFaltus()){
View subView = LayoutInflater.from(context).inflate(R.layout.subitem,null);
final EditText subEditText = subView.findViewById(R.id.subItem);
subItem.addView(subView);
subEditText.setTag(subItem.indexOfChild(subView));
return convertView;
}
Я попытался добавить TextChangedListener к editext внутри цикла for, и onTextChanged я обновил свой список значений текстом. Но, к сожалению, он обновляет все значения с одинаковым значением.
subEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
subEditText.requestFocus();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0){
posms.get(position).getFaltus().get((Integer) subEditText.getTag()).setNumber(s.toString());
}
}
});
Любое предложение приветствуется
Ответ №1:
Попробуйте использовать эти строки кода
for (int i = 0; i < posms.get(position).getFaltus().size(); i ) {
final Faltu faltu = posms.get(position).getFaltus().get(i);
View subView = LayoutInflater.from(context).inflate(R.layout.subitem, null);
final EditText subEditText = subView.findViewById(R.id.subItem);
subItem.addView(subView);
subEditText.setTag(i);
subEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
subEditText.requestFocus();
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.length() > 0){
//posms.get(position).getFaltus().get(i).setNumber(s.toString());
faltu.setNumber(s.toString());
}
}
});
}
Комментарии:
1. обновляет ли faltu.setNumber(s.toString()); значение также в списке?
2. да, но вы должны уведомить адаптер, вызвав
notifyDataSetChanged
3. есть идеи, где я должен вызвать notifyDataSetChanged ?
4. @user3921178 только что попробовал ваш код. К сожалению, он обновляет все элементы с одинаковыми значениями.
5. если вы вносите какие-либо изменения в список, то после изменения вам нужно вызвать
notifyDataSetChanged()
, чтобы отобразить эффект измененного списка в listview. Везде, где вы применяли изменения в списке, вызывайтеnotifyDataSetChanged()
. В вашем случае это должно бытьafterTextChanged
послеfaltu
обновления объекта. Примечание: — listview обновляется после каждого ввода текста в edittext, поэтому он может застрять.