清除ListView的View缓存

时间:2012-08-28 18:39:15

标签: android listview

我有一个ListView,我通过一个复杂的编码。该列表通常使用需要不同视图的不同类型的数据进行更改。在极少数情况下,我最终会得到1个被Android重用的视图,这个视图看起来会有所不同。似乎只有在显示的数据发生根本变化时才会发生。我希望有一种方法可以以编程方式擦除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();
            }
...

2 个答案:

答案 0 :(得分:0)

当您滚动列表时,ListView会执行一些名为“回收”的操作,您需要做的是覆盖getView()方法以更新正在回收的单个listView项。默认情况下,android不会清除这些视图。查看ListView回收的以下链接:

http://mobile.cs.fsu.edu/the-nuance-of-android-listview-recycling-for-n00bs/

没有代码,很难说你是否已经知道这一点,但这是我经历中出现此类问题的原因。

答案 1 :(得分:0)

如果您为列表项使用多个布局,那么我建议每次在getView()方法中从xml中扩展适当的布局。