这是因为上下滑动的时候,事件被ScrollView截获了,这时候应该禁止ScrollView截获上下滑动事件,解决方法如下

public class NoRollSwipeMenuListView extends SwipeMenuListView {

    private GestureDetector mGestureDetector;

    public NoRollSwipeMenuListView(Context context) {
super(context);
mGestureDetector = new GestureDetector(context, onGestureListener);
} public NoRollSwipeMenuListView(Context context, AttributeSet attrs) {
super(context, attrs);
mGestureDetector = new GestureDetector(context, onGestureListener);
} public NoRollSwipeMenuListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mGestureDetector = new GestureDetector(context, onGestureListener);
} public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
} @Override
public boolean onTouchEvent(MotionEvent ev) {
boolean b = mGestureDetector.onTouchEvent(ev);
// LogUtil.w("onTouchEvent", "mGestureDetector.onTouchEvent(ev)->" + b);
return super.onTouchEvent(ev);
} private GestureDetector.OnGestureListener onGestureListener = new GestureDetector.SimpleOnGestureListener() { //distanceX 左右滑动距离,左滑动正值,右滑动负值
//distanceY 上下滑动距离,上滑动正值,下滑动负值
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if (Math.abs(distanceY) >= Math.abs(distanceX)) {//上下滑动距离大于左右滑动距离,当作上下滑动
// LogUtil.w("onScroll", "distanceX=" + distanceX + ":distanceY=" + distanceY);
// LogUtil.w("onScroll", "true");
//上下滑动不做任何操作,在这里父ScrollView已经交出onTouch权限,否则如果权限在父ScrollView的话这里接收不到事件
//所以执行到这里是因为下面的setParentScrollAble(false);已经执行过了
return true;
}
//当滑动NoRollSwipeMenuListView的时候,让父ScrollView交出onTouch权限,也就是让父ScrollView停住不能滚动
setParentScrollAble(false);
// LogUtil.w("onScroll", "false");
return false;
}
}; /**
* 是否把滚动事件交给父ScrollView
*
* @param flag
*/
private void setParentScrollAble(boolean flag) {
//这里的parentScrollView就是NoRollSwipeMenuListView外面的那个ScrollView
// LogUtil.w("setParentScrollAble", "flag->" + flag);
getParent().requestDisallowInterceptTouchEvent(!flag);
}
}

SwipeMenuListView在ScrollView里上下滑动导致菜单不能显示完全的bug解决方法的更多相关文章

  1. ScrollView下嵌套GridView或ListView默认不在顶部的解决方法

    自定义ScrollView重写下面的方法 /* ScrollView下嵌套GridView或ListView默认不在顶部的解决方法*/ @Override protected int computeS ...

  2. eclipse下修改项目名导致tomcat内发布名不一致的解决方法 .

    eclipse下修改项目名导致tomcat内发布名不一致的解决方法 . ------------------------------------------------------- 解决方案: 直接 ...

  3. 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法(转)

    转自: 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法   系统环境:ubuntu 12.04 状况: 因为修改了/etc/sudoers以及相关权限,导致sudo无法使用,恰 ...

  4. 阿里云提示Discuz uc.key泄露导致代码注入漏洞uc.php的解决方法

    适用所有用UC整合 阿里云提示漏洞: discuz中的/api/uc.php存在代码写入漏洞,导致黑客可写入恶意代码获取uckey,.......... 漏洞名称:Discuz uc.key泄露导致代 ...

  5. 因用了NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误的解决方法

    今天遇到一个问题,就是“NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误”,百度后发现了一个解决方法,跟大家分享下: NeatUploa ...

  6. 关于惠普hp服务器开机时F10菜单变成F10 Function Disabled的解决方法

    今天笔者由于在Intelligent Provisioning智能配置里不小心将"启动Intelligent Provisioning"选项钩选成禁用了,如下 结果就造成,在之后服 ...

  7. Dynamics CRM 依赖组件类型为应用程序功能区导致的无法删除实体问题的解决方法

    看到有人问到这个问题,这边就简单描述下解决方法,主要是针对第一次碰到这个问题云里雾里的朋友,错误如下 在我们建lookup关联的时候有下图中的这么个设置,对于很多新手默认就是下图这样不会去做改动,因为 ...

  8. 因修改/etc/sudoers权限导致sudo和su不能使用的解决方法

    因为修改了/etc/sudoers以及相关权限,导致sudo无法使用,恰好Ubuntu的root密码没有设置,每次执行 su - 时.输入密码,提示:认证错误 . 解决方法: 1.重启ubuntu,启 ...

  9. Mysql安装后在服务里找不到和服务启动不起来的解决方法

    一,在安装完Mysql数据库后,发现在控制面板->管理->服务中找不到Mysql的服务启动 解决方法如下:开启命令行,按照如下步骤即可: 1.进入到mysql的安装包,在bin里执行:my ...

随机推荐

  1. 启用SQLite的Data Provider 运行WECOMPANYSITE时遇到ERROR CREATING CONTEXT 'SPRING.ROOT': ERROR THROWN BY A DEPENDENCY OF OBJECT 'SYSTEM.DATA.SQLITE'

    从网上下载的源码WeCompanySite,运行时报错 Error creating context 'spring.root': Error thrown by a dependency of ob ...

  2. codevs 2830 蓬莱山辉夜

    2830 蓬莱山辉夜 http://codevs.cn/problem/2830/ 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑, ...

  3. docker学习(4) 一些常用操作

    继续docker的学习之旅,今天练习一些常用的命令: 一.镜像相关 1.1 列出本机所有镜像 docker images 后面的操作,都以ubuntu做为练习的目标. 另外:如果某些镜像文件不想要了, ...

  4. Java连接远程Redis

    redis-server &  //后台启动redis redis-cli //使用redis   打开redis.conf文件在NETWORK部分有说明   /usr/local/src   ...

  5. highcharts .net导出服务 和 两种导出方式

    highcharts 的Net导出服务  GitHub上整理的https://github.com/imclem/Highcharts-export-module-asp.net 引用两个程序集 sh ...

  6. MyBatis 延迟加载,一级缓存,二级缓存设置

    什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...

  7. SQLSERVER单表CRUD通用方法

    一.适用场景 ①当你书写简单的增删改查心累了 ②当你的项目不考虑并发.高性能 ③当你追求更快速的开发效率 ④当你的业务只涉及单表 二.代码展示 ①单表Insert public bool Insert ...

  8. DevExpress.chartControt画趋势图

    private void DrawLine(DataTable dt) { Myalysis.Series.Clear(); //图标位置 Myalysis.Legend.AlignmentHoriz ...

  9. java中关键字volatile的作用

    用在多线程,同步变量. 线程为了提高效率,将某成员变量(如A)拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.volatile就是用来 ...

  10. Tlist删除技巧

    二.    从TList开始分析-- 为了写一个更好的性能ISAPI Filter,我需要更快速地从TList中删除部分连续的Item.比如这样的一段代码: var p : pChar = 'abcd ...