У меня есть ListView, AdapterView и View (search_options), который содержит EditText и 3 Spinners. Элементы ListView представляют собой несколько копий макета (search_options), где пользователь может добавить дополнительные параметры в ListView, а затем щелкнуть поиск, чтобы отправить запрос sql, созданный в соответствии с параметрами пользователя.
Я обнаружил, что индексы смешивания convertView добавили в действие глобальный список (myViews), и передал его в ArrayAdapter. Затем в ArrayAdapter (getView) я добавляю в него все вновь добавленные представления (myViews).
Также в getView вместо проверки, если convertView имеет значение null, я проверяю, имеет ли глобальный список (myViews) вид на выбранную (позицию). Это полностью решило проблемы после трехдневного чтения Интернета !!
1- на активность добавить это:
Map<Integer, View> myViews = new HashMap<>();
и затем передайте его в ArrayAdapter с помощью конструктора адаптера.
mSOAdapter = new SearchOptionsAdapter(getActivity(), resultStrs, myViews);
2- на getView:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view;
ViewHolder viewHolder;
if (!myViews.containsKey(position)) {
viewHolder = new ViewHolder();
LayoutInflater inflater = LayoutInflater.from(getContext());
view = inflater.inflate(R.layout.search_options, parent, false);
/// ...... YOUR CODE
myViews.put(position, view);
FontUtils.setCustomFontsIn(view, getContext().getAssets());
}else {
view = myViews.get(position);
}
return view;
}
Наконец-то больше нет смешивания предметов ...