在android中滚动listview时重复动画自定义控件

时间:2012-04-14 10:33:35

标签: android listview scroll scrollview

我在列表视图中有一个自定义控件,用于在点击列表项目时显示播放进度。

当我点击一个listitem并且它正在播放声音时,我会显示一个进度圈,但是如果我滚动listview这个自定义控件,它会显示上面的每6行。

这是我的问题: http://i43.tinypic.com/34dsx2e.png

这是我的CustomAdapter的getView:

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

    if (convertView == null) {
         mInflater = (LayoutInflater)  mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
         convertView = mInflater.inflate(mResourceId, parent, false);
         holder = new ViewHolder(convertView); 
         convertView.setTag(holder);
    } else {
         holder = (ViewHolder) convertView.getTag();
    }

    holder.position = position;


    Item item = getItem(position);
    holder.progressWheel.setPosition(position);
    holder.textViewTitle.setText(item.getName());
    return convertView;
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

出现进度循环是因为您正在回收convertView(listview会向您发送convertView参数以前使用过的视图以减少内存使用量)。有两种解决方案:

A)不要回收convertView(sub-obtimal)

替换:

if (convertView == null) {
     mInflater = (LayoutInflater)  mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
     convertView = mInflater.inflate(mResourceId, parent, false);
     holder = new ViewHolder(convertView); 
     convertView.setTag(holder);
} else {
     holder = (ViewHolder) convertView.getTag();
}

使用:

 mInflater = (LayoutInflater)  mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);          
 convertView = mInflater.inflate(mResourceId, parent, false);
 holder = new ViewHolder(convertView); 

B)在“return convertview”之前隐藏视图上的progressWheel