我有一个包含ListView的多个页面的Activity。我使用适配器来自定义列表项。每个项目都会动画到列表中:
public View getView(int i, View view, ViewGroup viewGroup) {
if (view == null) {
v = inflater.inflate(R.layout.list_item, null);
doTheThing = true;
}
//Some random code here
if(doTheThing) {
Animation animation = AnimationUtils.loadAnimation(a, R.anim.list_item_animation);
animation.setStartOffset(i * 60 + 200);
v.startAnimation(animation);
}
return v;
}
通过这种设置我有两个问题。第一个是,当我向左或向右滚动两页以上的动画重复时,它应该只在第一次打开活动时运行。第二个问题是,如果我快速滚动列表,有一些项目会暂时丢失,然后它们会重新生成。它总是随机的,当它们全部加载时,它不会再发生。
我该如何解决这个问题?
答案 0 :(得分:1)
基于“doTheThing”来判断convertView是否为null并不完全是确定性的。
适配器不保证是否/何时会回收视图,以及何时为您提供新视图。
当然,您可以保证在列表视图中获得第一页视图的新视图。但是,适配器可能会决定突然需要4个视图而不是3个以保持平滑滚动,在这种情况下,您将获得view == null,并触发动画。
我建议依靠更确定的方式来决定要制作动画的视图。例如,在被检索的第一个视图的500毫秒内检索的所有视图都将被设置动画等等。