我在列表视图中有一个自定义控件,用于在点击列表项目时显示播放进度。
当我点击一个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;
}
提前致谢!
答案 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