我正在实现一个BaseAdapter
并且我有一个列表项的translateAnimation。
问题是当向下滚动时,其他视图具有相同的偏移量。
下面是我对getView()
方法的实现:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
//initialization code
convertView.setTag(viewHolder);
} else {
viewHolder =(ViewHolder) convertView.getTag();
}
Animation animation;
switch (item.getAnimationDirection()) {
case AnimationDirection.HIDE:
animation = new TranslateAnimation(itemOffset, 0, 0, 0);
animation.setDuration(200);
animation.setFillAfter(true);
viewHolder.layoutToAnimate.setAnimation(animation);
item.setAnimationDirection(AnimationDirection.HIDDEN);
break;
case AnimationDirection.REVEAL:
itemOffset = viewHolder.remove.getWidth() + 20;
animation = new TranslateAnimation(0, itemOffset, 0, 0);
animation.setDuration(200);
animation.setFillAfter(true);
viewHolder.layoutToAnimate.setAnimation(animation);
item.setAnimationDirection(AnimationDirection.SHOWING);
break;
}
viewHolder.remove.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getAnimationDirection() == AnimationDirection.HIDDEN) {
item.setAnimationDirection(AnimationDirection.REVEAL);
notifyDataSetChanged();
}
}
});
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (item.getAnimationDirection() == AnimationDirection.SHOWING) {
item.setAnimationDirection(AnimationDirection.HIDE);
notifyDataSetChanged();
}
}
});
return convertView;
}
我的问题是:
如何保持每个
View
项的ListView
偏移状态? 最佳答案
android框架提供了保存和恢复视图属性的钩子,因此您需要做的就是确保视图代码实现onSaveInstanceState()
和onRestoreInstanceState(Parcelable state)
,并且在调用时,为其子视图调用相同的钩子,并调用父类的方法,例如super.onSaveInstanceState()
。
我发布了一个here的答案,它回答了一个关于保留listview中使用的数据的问题,同时也讨论了如何保留其他视图属性,比如注释中的滚动位置。