一、在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的单击、长按、列表滚动的更多相关文章

  1. Android ListView 长按列表弹出菜单

    Android ListView 长按列表弹出菜单 设置长按菜单 listView.setOnCreateContextMenuListener(new View.OnCreateContextMen ...

  2. 在Python中使用可变长参数列表

    函数定义 在函数定义中使用*args和**kwargs传递可变长参数. *args用作传递非命名键值可变长参数列表(位置参数); **kwargs用作传递键值可变长参数列表 函数调用 在调用函数时,使 ...

  3. 可变长参数列表误区与陷阱——va_arg不可接受的类型

    可变长参数列表误区与陷阱--va_arg不可接受的类型 实现一个有可变长参数列表函数的时候,会使用到stdarg.h(这里不讨论varargs.h)中提供的宏. 例如,我们要实现一个简易的my_pri ...

  4. 在android里用ExpandableListView实现二层和三层列表

    转载自http://www.cnblogs.com/nuliniaoboke/archive/2012/11/13/2767957.html 二层列表是直接用androidAPI中的Expandabl ...

  5. ExpandableListView控件实现二级列表

    效果图如下: 二级列表附有点击事件. 1.布局文件: 此处加了一个自定义的导航RelativeLayout,记得注activity的时候添加 android:theme="@style/Th ...

  6. android listview综合使用示例_结合数据库操作和listitem单击长按等事件处理

    本示例说明: 1.自定义listview条目样式,自定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,并且操作后listview自动刷新. 3.响应用户操作点击事 ...

  7. android listview综合使用演示样例_结合数据库操作和listitem单击长按等事件处理

    本演示样例说明: 1.自己定义listview条目样式,自己定义listview显示列数的多少,灵活与数据库中字段绑定. 2.实现对DB的增删改查,而且操作后listview自己主动刷新. 3.响应用 ...

  8. Android ExpandableListView BaseExpandableListAdapter (类似QQ分组列表)

    分组列表视图(ExpandableListView) 和ListView不同的是它是一个两级的滚动列表视图,每一个组可以展开,显示一些子项,类似于QQ列表,这些项目来至于ExpandableListA ...

  9. POJ1159——Palindrome(最长公共子序列+滚动数组)

    Palindrome DescriptionA palindrome is a symmetrical string, that is, a string read identically from ...

随机推荐

  1. form自动提交

    在做项目中,例如b2b的由商城跳往卖家中心的后台,当他既有会员账号又是卖家的时候,让他登录了商城,就不需要卖家登录的时候,处理过程中可以用到form表单自动登录. 实现简单思路:可以再普通会员登录的地 ...

  2. MvvmCross框架在XamarinForms中的使用入门

    做XamarinForms快一年了,最近趁着项目不是很紧,有点空闲的时间,研究了一下MvvmCross这个框架,感觉挺高大上的.一边研究一下写点入门的东西吧,大部分的东西github都有. 1添加Pa ...

  3. UML中类图(Class Diagram)的关系整理

    什么是UML类图? 类图显示了一组类.接口.协作以及他们之间的关系.在UML中问题域最终要被逐步转化,通过类来建模,通过编程语言构建这些类从而实现系统.类加上他们之间的关系就构成了类图,类图中还可以包 ...

  4. JavaScript基础:(加号,数值转换,布尔转换)

    JavaScript中加号运算符"+" 运算过程理解 1) 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值.日期对象通过toString()方法执行转换, ...

  5. linux 命令——61 wget(转)

    Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...

  6. linux 命令——48 watch (转)

    watch是一个非常实用的命令,基本所有的Linux发行版都带有这个小工具,如同名字一样,watch可以帮你监测一个命令的运行结果,省得你一遍遍的手动运行.在Linux下,watch是周期性的执行下个 ...

  7. 初见微服务之RESTful API

    1. REST名称由来 REST全称为Representational State Transfer,即表述性状态转移,最早由Roy Feilding博士在世纪之交(2000年)提出,喜欢追根溯源的朋 ...

  8. [Rails学习之路]初识Ruby(一)

    Ruby是一门动态的.强类型的.纯面向对象的编程语言.它和Python非常相似,但比Python面向对象更加彻底.使用更加灵活.语法更加复杂.也更为有趣. 抛开做事情到底应该有多少种方法这个问题,我相 ...

  9. POJ 3126 Prime Path(筛法,双向搜索)

    题意:一个4位的素数每次变动一个数位,中间过程也要上素数,问变成另一个的最小步数. 线性筛一遍以后bfs就好.我写的双向,其实没有必要. #include<cstdio> #include ...

  10. hadoop install

    1.home下建立hadoop 2.在Downloads下解压hadoop-2.6.0.tar.gz 3.将解压后的hadoop-2.6.0移动到/home/hadoop 4.csf@ubuntu:/ ...