问题:当给listview的条目加动画时,例如添加一个条目或者移除一个条目,动画效果会和添加删除条目的逻辑同时进行,因为动画并不是阻塞式的,这样会造成动画还没有结束,条目已经添加或者移除,从而动画作用在下面一个条目上面。

解决办法:想办法让动画执行完了之后再进行条目的添加或者移除操作(也就是刷新数据适配器),可以通过设置动画监听来实现,将要添加或者删除条目的逻辑放到动画监听的方法中,可以放到动画结束时调用的方法中,这样就保证了动画先执行,然后才刷新数据适配器

holder.iv_lock.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// 添加动画效果
animationView.startAnimation(mTranslateAnimation);
// 对动画执行过程做事件监听,监听到动画执行完成后,再去移除集合中的数据,操作数据库,刷新界面
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方法获取的对象
mAppLockList.remove(appInfo);
mAppUnLockList.add(appInfo);
// 2.从已加锁的数据库中删除一条数据
mDao.delete(appInfo.packageName);
// 3.刷新数据适配器
mLockAdapter.notifyDataSetChanged();
}else {
// 未加锁------>已加锁
// 1.未加锁集合删除一个,已加锁集合添加一个,对象就是getItem方法获取的对象
mAppLockList.add(appInfo);
mAppUnLockList.remove(appInfo);
// 2.从已加锁的数据库中插入一条数据
mDao.insert(appInfo.packageName);
// 3.刷新数据适配器
mUnLockAdapter.notifyDataSetChanged();
}
}
});
}
});

给listview加动画,让动画执行结束后再刷新的更多相关文章

  1. C# 多线程join的用法,等待多个子线程结束后再执行主线程

    等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = ...

  2. 如何让线程A等待B执行结束后执行?

    1. 使用条件变量 判断是否任务B已经做完,然后再执行任务A. 测试代码可看:https://blog.csdn.net/guochao6531/article/details/78075882 2. ...

  3. 用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat

    用一个bat文件调用另外两个bat文件,当1.bat执行完后再执行2.bat 摘自:https://zhidao.baidu.com/question/492732911.html @echo off ...

  4. C# 本进程执行完毕后再执行下一线程

    最近做了一套MES集成系统,由上料到成品使自动化运行,其中生产过程是逐步的,但是每一个动作都需要独立的线程进行数据监听,那么就需要实现线程等待. 代码: using System; using Sys ...

  5. React在componentWillMount中请求接口数据结束后再执行render

    1.在getInitialState中初始化isloading,初始值false getInitialState() { return { editionid: '', isloading:false ...

  6. Java Thread.join()详解--父线程等待子线程结束后再结束

    目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法   join是Th ...

  7. ajax请求执行完成后再执行其他操作(jQuery.page.js插件使用为例)

    就我们做知,ajax强大之处在于它的异步请求,但是有时候我们需要ajax执行彻底完成之后再执行其他函数或操作 这个时候往往我们用到ajax的回调函数,但是假如你不想或者不能把接下来的操作写在回调函数中 ...

  8. java并发编程学习:如何等待多个线程执行完成后再继续后续处理(synchronized、join、FutureTask、CyclicBarrier)

    多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的 ...

  9. html页面 加载完成后再刷新 一次

    主要用于第一次加载页面有部分加载bug,再刷新一次即可正常运行. 简单粗暴直接上代码,不带参数,0影响 <Script>function refresh(){ url = location ...

随机推荐

  1. Gitlab安装、汉化及使用

    环境:centos 关闭防火墙和selinux [root@Gitlab ~]# setenforce [root@Gitlab ~]# service iptables stop && ...

  2. 类成员(static)和final修饰符

    在Java类里只能包含成员变量.方法.构造器.初始化块.内部类(包括接口.枚举)5种成员,类成员是用static来修饰的,其属于整个类. 当使用实例来访问类成员时,实际上依然是委托给该类来访问类成员, ...

  3. 集束搜索beam search和贪心搜索greedy search

    贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...

  4. ECS之Git服务器搭建

    最简教程 ### . 安装Git 安装Git服务,命令如下: ```Shell $ yum install curl-devel expat-devel gettext-devel openssl-d ...

  5. python第一天2.28

    2019年2月28日 今日内容大纲: 01 cpu 内存 硬盘 操作系统 CPU:中央处理器,相当于人大脑.   运行速度:飞机 内存:临时存储数据. 8g,16g,      运行速度:高铁 1,成 ...

  6. P4717 【模板】快速沃尔什变换

    思路 FWT的模板 FWT解决这样的卷积 \[ C_k=\sum_{i\otimes j=k} A_iB_j \] \(\otimes\)可能是and,or,xor等位运算 几个式子 FWTand: ...

  7. wireshark基础学习—第四部分wireshark过滤器总结

    这两天一直在熟悉wireshark的过滤器语法规则,以前也接触过这个工具,但只是学校老师教的如何去选择一个接口进行抓取,以及如何去分析一个包的数据.可惜当时对此也没有过多深入.对于我当前,并未接触太多 ...

  8. Largest Rectangular Area in a Histogram 最大连续面积

    在HankerRank遇到一题计算柱状图连续矩形面积的问题. 举例 hist = [3, 2, 3]. 在这个柱状图里面最大可以容纳一个high = 2 length = 3的连续矩形, 其面积 = ...

  9. Windows server2008服务器设置多用户登录

    添加用户 右击我的电脑-->管理-->本地用户和组-->新用户 启用远程服务并添加远程用户 启用 右键我的电脑--->属性--->远程设置--->勾上允许远程连接到 ...

  10. Linux基础命令mkdir

    mkdir  /home/ceshi   home目录下创建测试目录 mkdir  -p  /home/ceshi1/ceshi home目录下递归创建 mkdir     /home/ceshi2  ...