0

我有一个 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();
            }
...
4

2 回答 2

0

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

于 2012-08-28T19:57:42.047 回答
0

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

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

如果没有代码,很难判断您是否已经知道这一点,但根据我的经验,这是造成此类问题的原因。

于 2012-08-28T19:10:29.863 回答