给listview加动画,让动画执行结束后再刷新

问题:当给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();
                            }
                        }
                    });
                }
            });
时间: 2024-12-22 12:21:04

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

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

等待多个子线程结束后再执行主线程 class MultiThread{ #region join test public void MultiThreadTest() { Thread[] ths = new Thread[2]; ths[0] = new Thread(Method1); ths[1] = new Thread(Method2); foreach (Thread item in ths) { //首先让所有线程都启动 item.Start(); //试想一下在这里加上item.

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

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

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

目录(?)[+] 阅读目录 一.使用方式. 二.为什么要用join()方法 三.join方法的作用 join 四.用实例来理解 打印结果: 打印结果: 五.从源码看join()方法 join是Thread类的一个方法,启动线程后直接调用,例如: ? 1 Thread t = new AThread(); t.start(); t.join(); 回到顶部 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的运算,主线程往往将于子线程之前结束,但是如果主线程处理完其他的事务后,需

iOS AFNetWorking中block执行完后再执行其它操作

需求:同时进行两次网络请求,网络请求是异步的,在网络请求成功后进行其它的操作.两个网络请求是这样,一个网络请求中block执行完之后,再进行其它操作,也是一样的原理,只是这时候不需要线程组了,只需要信号量.当然也适用于所有的block. 接下来就说下,在两次异步请求之后要做的操作. 利用线程组和信号量来完成,看代码 - (void)getData { NSString *appIdKey = @"8781e4ef1c73ff20a180d3d7a42a8c04"; NSString*

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

多线程应用中,经常会遇到这种场景:后面的处理,依赖前面的N个线程的处理结果,必须等前面的线程执行完毕后,后面的代码才允许执行. 在我不知道CyclicBarrier之前,最容易想到的就是放置一个公用的static变量,假如有10个线程,每个线程处理完上去累加下结果,然后后面用一个死循环(或类似线程阻塞的方法),去数这个结果,达到10个,说明大家都爽完了,可以进行后续的事情了,这个想法虽然土鳖,但是基本上跟语言无关,几乎所有主流编程语言都支持. package yjmyzz.test; publi

Ajax开始执行时触发 ajaxStart() | Ajax 执行结束后触发 ajaxStop()

<1> <html> <head> <title></title> <script src="jquery-1.11.2.js"></script> </head> <body> <label for="UserId">请输入用户的ID编号:</label><input type="text" id="

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

摘自:https://zhidao.baidu.com/question/492732911.html @echo off start d:\1.bat start c:\2.bat 这样是2个任务同时执行,应该怎么改,谢谢 1 2 3 4 5 6 7 8 9 @echo off start /wait d:\1.bat start /wait c:\2.bat   @echo off call d:\1.bat call c:\2.bat start 是在新窗口运行调用的文件,call是在当前

线程池: 等待线程池内所有线程执行完毕后再继续任务

boolean loop = true; do{ loop=!executorService.awaitTermination(2, TimeUnit.SECONDS); }while(loop);

JAVA设计方法思考之如何实现一个方法执行完毕后自动执行下一个方法

今天编程时,突然想起来在一些异步操作或Android原生库的时候,需要我们实现一些方法, 这些方法只需要我们具体实现,然后他们会在适当的时候,自动被调用! 例如AsyncTask,执行玩doInBackground()后会执行处理结果的postResult()方法,但我们并没有设置过他们的执行顺序. 以前只知道他们的运行原理,但不知道具体的实现方法,细想起来,这是一个相当不错的代码设计,所以决定研究一下. 因为一开始是通过实现方法来具体实现那些需要被执行的方法的,所以以为实现的方式是接口, 思索