当前位置: 代码迷 >> Android >> ListView Item控件部分销毁的有关问题
  详细解决方案

ListView Item控件部分销毁的有关问题

热度:64   发布时间:2016-04-28 03:48:42.0
ListView Item控件部分销毁的问题

@Override
public View getView(int position, View convertView, ViewGroup parent) {  
//这里 convertView 可能是空,也可以说一个已经存在的视图,但是比较要命的是,如果 convertView 是一个包含子控件的控件组,那么它自己虽然不是null,但是部分子控件可能是被销毁的,如果使用 convertView.findViewById(id)取回控件时,是可能是 null的。
这就导致了,这个判断毫无意义,因为不能保证子控件可用,那么整个控件组也是不可用的,毕竟动态的生成那些被null了的子控件是非常麻烦的,一般convertView 是从一个xml布局文件生成的,如果子控件要动态生成,完全不能使用这种方法了。
}


大家有人遇到这种情况吗?是怎么解决的呢?
------解决思路----------------------
 if (convertView != null) {
            holder = (listViewHolder) convertView.getTag();
        } else {
            convertView = mInflater.inflate(R.layout.myblog_list, null);
            holder = new listViewHolder();
            holder.title=(TextView) convertView.findViewById(valueViewID[2]);
            holder.notemessage=(TextView) convertView.findViewById(valueViewID[0]);
            holder.notetime=(TextView) convertView.findViewById(valueViewID[1]);
            convertView.setTag(holder);
        }这样写吧
------解决思路----------------------
接点分。

class TAG_Layout {
        TextView itemText;
     CheckBox itemCheck;
     ImageView itemImage;
    }

    public boolean initItemView(View convertView){
        itemText = (TextView) convertView.findViewById(R.id.group_item_text);
        if(itemText==null) return false;
         FrameLayout fl = (FrameLayout) convertView.findViewById(R.id.group_item_frame);
         if(fl==null) return false;
        itemCheck = (CheckBox)fl.findViewById(R.id.group_item_check);
        if(itemCheck==null) return false;
        itemImage = (ImageView) fl.findViewById(R.id.group_item_image);
        if(itemImage==null) return false;
        return true;
    }

@Override
    public View getView(int position, View convertView, ViewGroup parent) {  
TAG_Layout tag;
        if(convertView == null){
        convertView = LayoutInflater.from(mContext).inflate(R.layout.group_grid_item, null);
tag = new TAG_Layout();
tag.itemText = convertView.findViewById(R.id.group_item_text);
tag.itemCheck = convertView.findViewById(R.id.group_item_check);
tag.itemImage = convertView.findViewById(R.id.group_item_image);
convertView.setTag(tag);
} else {
tag = convertView.getTag();
}
        
        tag.itemText.setText(sd.GroupList.get(position).Name);
         tag.itemCheck.setId(position);
         tag.itemCheck.setOnCheckedChangeListener(itemCheckChangedListener);
         tag.itemCheck.setVisibility(showCheck);

        return convertView;  
    }
  相关解决方案