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 ...
随机推荐
- <Android 基础(五)> MVVM
介绍 MVVM,Model-View-ViewModel,与上次讲的MVP模式比较的类似,MVP中需要大量的接口文件,而MVVM模式下,View和ViewModel直接关联,使用上比较方便,简化了代码 ...
- Mac 颜色取值
command+shift+4 截图,我靠,我以前不知道 系统自带数码测色计, 选择显示十六位制 command+L 锁定 command+shift+c 复制 简直太方便
- 签证-L1/L2
http://blog.sina.com.cn/s/blog_7664b7f70102uweb.html 14年4月我接到公司通知,要从MICROSTRATEGY中国研发中心内部transfer到美国 ...
- 触发OOM杀掉了mysql
中午收到反馈平台所有账号全部无法登录,运维就是苦逼,饭都没吃就跑来处理紧急故障,先自己测试了下确实无法登录进系统,登录服务器检查,发现mysql数据库挂掉了,定位到了原因就赶紧重启mysql吧,结果启 ...
- File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录)
File 与 Log #3--动态加入控件,[图片版]访客计数器(用.txt档案来记录) 以前的两篇文章(收录在书本「上集」的第十七章) 请看「ASP.NET专题实务」,松岗出版 File 与 Log ...
- java Vamei快速教程06 组合
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经尝试去定义类.定义类,就是新建了一种类型(type).有了类,我们接着构造 ...
- CSS之常见文字样式整理
常见文字样式 行高:line-height,当我i们将行高的大小设置成当前元素的高度时,可以实现当行文本在当前元素中垂直方向居中显示的效果 水平对齐方式:text-align:left|center| ...
- python_32_文件操作1
#目录里先创建一个yesterday文件 '''对文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 ''' print(open('yesterday',enc ...
- 常量池与方法区以及又读new String对象创建问题
又拿出这道String str1 = new String("abc");创建几个对象的面试题梳理了一下常量池与方法区的关系,希望能把这两者的关系通过这道面试题说明白 方法区是什么 ...
- 自定义配置Webpack和Babel配置
在使用ant-design-vue的包时样式是可以生效的但是如果我需要用到less文件时会报一个异常 当然这个异常其实很清晰的说明了什么问题看错误信息里面有issues地址,看来问题不止我们遇见了可以 ...