42、通过ontouch检测expandableListview的单击、长按、列表滚动
一、在model定义变量:
public boolean isExpandableListviewScroll = false;//这个是
首先监听expandableListview的滚动:
    Expandablelistview_all_waiting_push.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                // TODO Auto-generated method stub
                isExpandableListviewScroll = true;    
            }
            @Override
            public void onScroll(AbsListView view, int firstVisibleItem,
                    int visibleItemCount, int totalItemCount) {
                // TODO Auto-generated method stub
                //push_all_waiting_expandable_adapter.isScroll = true;
            }
        });
二、在adapter中定义变量:
public boolean flagLongClick = true;
public boolean flagPressed = true;
         otl = new View.OnTouchListener() {
                    @Override
                    public synchronized boolean onTouch(View v, MotionEvent ev) {
                        // TODO Auto-generated method stub
                          switch (ev.getAction() & MotionEvent.ACTION_MASK) {
                            case MotionEvent.ACTION_DOWN:
                                    mDownX = ev.getX();
                                    mDownY = ev.getY();
                                    lastPressTime = System.currentTimeMillis();
                                    mealDone.isExpandableListviewScroll = false;
                                    if(!flagPressed)
                                    {
                                        flagPressed = true;
                                        CommonUtils.LogWuwei(tag,"lastPressTime is "+lastPressTime);
                                      new Handler().postDelayed(new Runnable() {
                                        @Override
                                        public void run() {
                                            // TODO Auto-generated method stub
                                            CommonUtils.LogWuwei(tag, "flagLongClick is "+flagLongClick);
                                            if(flagLongClick && !mealDone.isExpandableListviewScroll)
                                            {
                                                mealDone.isExpandableListviewScroll = false;
                                                btn_whether_packaged.performLongClick();
                                                flagLongClick = false;
                                            }
                                        }
                                    }, 300);
                                    }
                                break;
                            case MotionEvent.ACTION_CANCEL:
                            case MotionEvent.ACTION_UP:
                                    flagPressed = false;
                                    if (!isScroll)
                                    {
                                        if(mealDone.isExpandableListviewScroll)
                                        {
                                            mealDone.isExpandableListviewScroll = false;
                                            return true;
                                        }
                                        long nowTime = System.currentTimeMillis();
                                        if(nowTime-lastPressTime > 300)
                                        {
                                            lastPressTime = 0;
                                            flagLongClick = true;
                                        }
                                        else
                                        {
                                            flagLongClick = false;
                                            Log.e(tag, "onClick ");
                                            btn_whether_packaged.performClick();
                                        }
                                        return false;
                                    }
                                    else
                                    {
                                        isScroll = false;
                                        return false;
                                    }
                            case MotionEvent.ACTION_MOVE:
                                     flagPressed = false;
                                     flagLongClick = true;
                                     if(Math.abs(mDownX-ev.getX()) > 150)
                                     {
                                        Log.e(tag, "action move is scroll");
                                        isScroll = true;
                                     }
                                break;
                            default:
                                    return false    ;
                        } 
                          return false    ;
                        
处理流程:
0、如果expandableListview滚动,则isExpandableListviewScroll置为
1、检测到expandableListview的item按下
①记录按下时间 lastPressTime ;
①首先判断上次按下是否弹起,如果弹起,那么启动一个0.3秒后执行的的定时任务,
②定时任务如下:
判断是否长按且expandableListview没有滚动(!isExpandableListviewScroll && flagLongClick)
如果符合条件,将isExpandableListviewScroll置为false,同时响应事先写好的长按事件。
2、那么如何响应单击事件?
单击事件手抬起的时候,也就是在响应MotionEvent.ACTION_UP的时候,手势抬起处理流程:
①flagPressed = true;意思就是本次按下事件已经抬起
②
判断isExpandableListviewScroll是否为真,也就是看是否在滚动,
2、1、如果是滚动,那么就什么不用响应
2、2、获取当前时间,如果当前时间和按下时间差小于0.3秒,那么执行实现写好的单击事件
3、move事件
如果move则认为手抬起、长按事件flag为真(因为手一直未松开)
42、通过ontouch检测expandableListview的单击、长按、列表滚动的更多相关文章
- Android ListView 长按列表弹出菜单
		
Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...
 - 在Python中使用可变长参数列表
		
函数定义 在函数定义中使用*args和**kwargs传递可变长参数. *args用作传递非命名键值可变长参数列表(位置参数); **kwargs用作传递键值可变长参数列表 函数调用 在调用函数时,使 ...
 - 可变长参数列表误区与陷阱——va_arg不可接受的类型
		
可变长参数列表误区与陷阱--va_arg不可接受的类型 实现一个有可变长参数列表函数的时候,会使用到stdarg.h(这里不讨论varargs.h)中提供的宏. 例如,我们要实现一个简易的my_pri ...
 - 在android里用ExpandableListView实现二层和三层列表
		
转载自http://www.cnblogs.com/nuliniaoboke/archive/2012/11/13/2767957.html 二层列表是直接用androidAPI中的Expandabl ...
 - ExpandableListView控件实现二级列表
		
效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...
 - android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理
		
本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...
 - android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理
		
本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...
 - Android  ExpandableListView  BaseExpandableListAdapter (类似QQ分组列表)
		
分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...
 - POJ1159——Palindrome(最长公共子序列+滚动数组)
		
Palindrome DescriptionA palindrome is a symmetrical string, that is, a string read identically from ...
 
随机推荐
- java集合杂谈
			
一:java集合框架如下图所示: 大致说明:看上面的框架图,先抓住它的主干,即Collection和Map. 1.Collection是一个接口,是高度抽象出来的集合,它包含了集合的基本操作和属性.C ...
 - bank conflct 一句话总结
			
由于最新的多播模式区别于原来的广播模式,原来同一个warp不同线程访问同一个bank的相同地址不再是bank conflict, 现在总结为:只要同一个 warp 的不同线程会访问到同一个 bank ...
 - Mysql update后insert造成死锁原因分析及解决
			
系统中出现死锁的日志如下: ) TRANSACTION: , ACTIVE sec inserting mysql tables , locked LOCK WAIT lock struct(s), ...
 - pysnmp使用
			
install yum install python-pysnmp yum install python-pyasn1 or pip install pysnmp pip install pyasn1 ...
 - python 学习之FAQ:find 与 find_all 使用
			
FAQ记录 1. 错误源码 错误源码如下 def fillUnivList(_html,_ulist): soup =BeautifulSoup(_html,'html.parser') fo ...
 - SQL Server(第二章) 字符串函数、日期时间函数、转换函数
			
--1.CONCAT 函数:字符串连接(支持sql server2012 SQL规则 如果与NULL连接返回NILL) SELECT empid,CONCAT(firstname,lastname) ...
 - HDU 1008 电梯( 水题)
			
题意: 电梯当前在0层,每在1层需要停5秒,往上走每层需6秒,往下走每层需要4秒. 思路: 在接收输入的时候直接计算了它,不用再弄一个循环.每计算一个请求就更新当前层,停留5秒的等到输出时再加上5*n ...
 - 工作流性能优化(敢问activiti有扩展性?)(3)
			
2015/4/20 周末回去想了下,hibernate.mybatis.jdbc,都行,最终定了用mybatis,谁叫它这么优雅,acvtiviti是依赖了mybatis的,就不用再引入包了: 看了配 ...
 - Android(java)学习笔记88:BaseAdapter适配器重写之getView()
			
1. BaseAdapter适配器重写 之getView(): (1)View getview(int position, View convertview, ViewGroup parent ) 第 ...
 - 【转】iOS开发4:关闭键盘
			
在 iOS 程序中当想要在文本框中输入数据,轻触文本框会打开键盘.对于 iPad 程序,其键盘有一个按钮可以用来关闭键盘,但是 iPhone 程序中的键盘却没有这样的按钮,不过我们可以采取一些方法关闭 ...