我有一个ListView,我通过一个复杂的编码位。该列表通常会随着需要不同视图的不同类型的数据而变化。在罕见的情况下,我最终会看到1个视图被Android重复使用,应该看起来不同。它似乎只发生在从根本上显示的数据发生变化时。我希望有一种方法来编程清理ListView的内存。这可能吗?清除ListView的查看缓存
这里是我getView的开头:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
SearchHolder holder = null;
int type = getItemViewType(position);
if (null == convertView) {
holder = new SearchHolder();
if (type == SEARCH_TYPE_FREETEXT) {
convertView = mInflater.inflate(R.layout.layout_search_item_freetext, null);
holder.txtText = (TextView) convertView.findViewById(R.id.search_itemname);
holder.vHeaderWrapper = (LinearLayout) convertView.findViewById(R.id.search_headerwrapper);
holder.txtHeader = (TextView) convertView.findViewById(R.id.search_header);
}
else {
if (items.get(position).mData == null) {
convertView = mInflater.inflate(R.layout.layout_loadmoreresults_white, null);
}
else {
convertView = mInflater.inflate(R.layout.layout_search_item, null);
holder.txtText = (TextView) convertView.findViewById(R.id.search_itemname);
holder.vHeaderWrapper = (LinearLayout) convertView.findViewById(R.id.search_headerwrapper);
holder.txtHeader = (TextView) convertView.findViewById(R.id.search_header);
}
}
convertView.setTag(holder);
}
else {
holder = (SearchHolder)convertView.getTag();
}
...
我已经回答了这个问题http://stackoverflow.com/questions/12049198/how-to-clear-the-views-which-are-held-in-the-listviews-recyclebin这似乎是你想。 – Luksprog
我用'invalidate()',但我的问题仍然存在。我将新数据放入我的ArrayAdapter中,并调用notify'notifyDataSetChanged()',它仍在重用需要切换到另一个布局的布局。 – Andrew
如果你正确地实现了'getViewTypeCount'和'getItemViewType'方法,那么所有应该都可以(从你的代码看来,你只有两种类型的行,所以复杂性不应该那么大)。我认为在更新适配器的数据时,您没有更新正确的getItemViewType方法以返回正确的结果。 – Luksprog