我有一个 ListView、AdapterView 和一个包含 EditText 和 3 个 Spinner 的视图(search_options)。ListView 项目是 (search_options) 布局的多个副本,用户可以在 ListView 中添加更多选项,然后单击搜索以发送根据用户选项构建的 sql 查询。
我发现 convertView 混合不合理,所以我在活动中添加了一个全局列表(myViews)并将其传递给 ArrayAdapter。然后在 ArrayAdapter (getView) 中添加每个新添加的视图 (myViews)。
同样在 getView 上,而不是检查 convertView 是否为空,我检查全局列表(myViews)是否对所选(位置)有一个视图。它在失去 3 天阅读互联网后完全解决了问题!
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;
}
终于不再混合项目了......