在 listview 滚定时 item会产生复用。
也就是说listview缓存的item是一定的,在滚动后,更新的时候,会复用前边不再使用的item。
所以在更新控件 尤其是进度条之类的,就需要进行判断,判断当前更新的item是否在可视的item中
即 在
Listview.getFirstVisiblePosition() 和 Listview.getLastVisiblePosition() 之间
如果不在就需要计算 该位置相当于哪一个可视的item, 然后获取那个item 进行更新数据。
附上代码段
int firstVisiblePosition = musicListview.getFirstVisiblePosition();
int lastVisiblePosition = musicListview.getLastVisiblePosition();
if (position >= firstVisiblePosition && index <= lastVisiblePosition) {
View view = musicListview.getChildAt(position - firstVisiblePosition);
if (view.getTag() instanceof ListAdapter.InnerItem) {
ListAdapter.InnerItem innerItem = (ListAdapter.InnerItem) view.getTag();
innerItem.ProgreddBar.setProgress((float) progress / 100.0f);
}
}
时间: 2024-10-13 18:48:58