最近在做一个小应用时碰到这个问题,来分享一下解决办法:
1.为控件添加动画效果,动画默认是非阻塞的,所以动画执行的同时,动画以下的代码也会执行,因此就有可能出现标题中所述的情况
2.一种解决办法就是对动画执行过程做事件监听,在动画执行结束的方法中去执行之后的逻辑。
mTranslateAnimation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
//动画执行结束后调用的方法
@Override
public void onAnimationEnd(Animation animation) {
if (isLock) {
// 已加锁条目调到未加锁条目中
// 添加动画效果
// 1.已加锁集合删除一个,未加锁集合添加一个,对象就是getitem方法获取的对象
mLockList.remove(appInfo);
mUnLockList.add(appInfo);
// 2.从已加锁数据库中删除一条数据
mDao.delete(appInfo.packageName);
// 3.刷新数据适配器
mLockAdapter.notifyDataSetChanged();
} else {
// 未加锁条目跳到已加锁条目中
// 添加动画效果
// 1.已加锁集合添加一个,未加锁集合移除一个,对象就是getitem方法获取的对象
mLockList.add(appInfo);
mUnLockList.remove(appInfo);
// 2.从已加锁数据库中插入一条数据
mDao.insert(appInfo.packageName);
// 3.刷新数据适配器
mUnLockAdapter.notifyDataSetChanged();
}
}
});
我这里举的例子是listview条目增加删除的平移动画效果以及两个数据适配器的刷新和数据库的插入、删除操作