滚动时Android自定义列表视图断断续续

时间:2015-05-20 15:18:34

标签: android android-listview scroll smooth-scrolling

我在Android中定义了一个自定义listView,用于显示树状结构数据集。一切都很好但是当我滚动一个被扩展的元素时,它开始变得非常糟糕。

使用viewHolder或缓存没有任何区别。

这是BaseAdapter的相关代码:

public TreeViewAdapter(Context context, List<TreeElementI> fileList) {
    this.context = context;
    this.fileList = fileList;
    iconCollapse = BitmapFactory.decodeResource(context.getResources(), R.drawable.collapse);
    iconExpand = BitmapFactory.decodeResource(context.getResources(), R.drawable.expand);
}

static class ViewHolder {
    ImageView icon;
    TextView text;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        holder = new ViewHolder();
        convertView = View.inflate(context, R.layout.tree_item, null);
        holder.text = (TextView) convertView.findViewById(R.id.text_tree);
        holder.icon = (ImageView) convertView.findViewById(R.id.image_tree);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    final TreeElementI elem = (TreeElementI) getItem(position);

    int level = elem.getLevel();
    holder.text.setText(elem.getOutlineTitle());

    if (elem.hasChild()) {
        if (elem.isExpanded())
            holder.icon.setImageBitmap(iconCollapse);
        else
            holder.icon.setImageBitmap(iconExpand);
    } else {
        holder.icon.setVisibility(View.INVISIBLE);
    }

    return convertView;
}

在一些测试中,我注意到当我改变

if (elem.isExpanded())
    holder.icon.setImageBitmap(iconCollapse);
else
    holder.icon.setImageBitmap(iconExpand);

if (elem.isExpanded())
    holder.icon.setImageBitmap(iconExpand);
else
    holder.icon.setImageBitmap(iconExpand);

if (elem.isExpanded())
    holder.icon.setImageBitmap(iconCollapse);
else
    holder.icon.setImageBitmap(iconCollapse);

listView不再是口吃,一切都很完美。方法isExpanded()也不是问题,因为它基本上是对象的getter函数,并且没有进行复杂的计算。

我也尝试过预加载图片,只改变两个选项的可见性,但没有结果:

static class ViewHolder {
    ImageView collapse, expand;
    TextView text;
}

if (elem.isExpanded()) {
    holder.collapse.setVisibility(View.VISIBLE);
    holder.expand.setVisibility(View.GONE);
} else {
    holder.collapse.setVisibility(View.VISIBLE);
    holder.expand.setVisibility(View.GONE);
}

1 个答案:

答案 0 :(得分:0)

您是否尝试过将位图更改为BitmapDrawable,将图像设置为imageview,就像这样

BitmapDrawable obj = new BitmapDrawable(getResources(), bitmap)

在设置之前保留bitmapDrawable的2个实例。

使用imgvw.setBackgroundDrawable()通过bitmapdrawable设置imgview。