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

这是因为上下滑动的时候,事件被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);
    }
}
时间: 2025-01-02 00:29:53

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

关于NFSv4服务共享目录里的文件UID和GID显示为nobody的解决方法

一.问题现象: 当我们使用NFSv4这个版本的NFS服务给客户端提供共享文件系统时,会产生共享文件夹下的文件的属主和属组都是nobody的现象,具体现象见下图: 二.问题原因: 造成UID和GID显示为nobody的原因是,nfsv4提供了称为rpc.idmapd 的守护进程,这个服务的配置文件是 /etc/idmapd.conf .当收到来自客户端的加载请求时,该守护进程将处理UID 和 GID 映射,如果不对其进行配置,这个服务默认将共享目录内文件的UID和GID映射为nobody,见下图:

ScrollView 嵌套ListView 滑动冲突,与显示不全

import android.content.Context; import android.util.AttributeSet; import android.widget.ListView; /** * * @author jiarh *2014-8-14 */ public class UserListView extends ListView { public UserListView(Context context) { super(context); } public UserLis

项目中 2个或者多个EF模型 表名称相同会导致生成的实体类 覆盖的解决方法

场景:  2个数据库, 一个新,一个旧,  把旧的 数据库中的数据,导入到新的数据库中,  使用到了2个 EF实体模型, 新数据库 和 旧数据库中的表,有的名称是相同的 (但是结构是不同的) 旧的数据库中的 tb_area 表,只有2个字段 新数据库中的 tb_area 有很多字段  ,结果新数据库里面的 表,由于和旧数据库的表 重名,导致旧数据库里面的  表生产的cs文件 没有了, 只剩下新数据库中的表实体   那么现在问题就来了,我要调用旧表里面的 model 实体模型,怎么拿呢? 拿不到了

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

今天遇到一个问题,就是"NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误",百度后发现了一个解决方法,跟大家分享下: NeatUpload是一个开源的大文件上传控件,非常的强大,支持文件类型过滤.上传进度条显示.多文件上传等强大的功能. 但部署至项目后,有些地方用普通的FileUpload上传时却发生了一个错误(Nonfile portion > 4194304 bytes,文件大于默认值4M),因如果用NeatUp

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

当ScrollView下嵌套GridView或ListView时,如果内容超过一屏默认位置不在ScrollView的顶部,用scrollViewMsg.scrollTo(0,0)设置也不起作用,这是因为嵌套GridView或ListView获了焦点,解决方法有如下几种: 方法1把ScrollView里的第一个View获取焦点: baseView.setFocusable(true); baseView.setFocusableInTouchMode(true); baseView.request

Windows 8.1/10 升级补丁导致Windows资源管理器停止响应的解决方法

前言 我自己的操作系统是Windows 8.1(现在为Windows 10),微软在2015年03月11日推送了新的更新补丁,重新启动计算机后发现Windows资源管理器频繁卡顿假死导致不停重启,资源管理器CPU会异常升高,使得Windows资源管理器停止响应.这个问题困扰了我大半个月时间,差点就直接怒降Windows 7或者提前入坑Windows 10预览版(也有各种地雷Bug在等你来踩),现在终于找到了解决方法,分享给大家以供参考. 微软这次的升级补丁测试得可真到位 更新历史 2015年05

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

今天笔者由于在Intelligent Provisioning智能配置里不小心将"启动Intelligent Provisioning"选项钩选成禁用了,如下 结果就造成,在之后服务器开机的时候.就没有F10 Intelligent Provisioning的选项了,而是变成了F10 Function Disabled 经过官方文档,及上网查询才知道是F10引导功能被禁用,需要在BIOS里进行设置启用,现将解决方法过程记录如下: 1.开机F9 setup进入BIOS设置 2.进入BIO

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

看到有人问到这个问题,这边就简单描述下解决方法,主要是针对第一次碰到这个问题云里雾里的朋友,错误如下 在我们建lookup关联的时候有下图中的这么个设置,对于很多新手默认就是下图这样不会去做改动,因为本身也没人告诉他要怎么做,这里就会涉及到一个导航显示的问题. 我这边举个例子,仓库盘点和仓库有个N:1的关系,那默认在导航中以附复数名称显示,也就是下图2中的样子 在表单编辑器中查看就会是下面这个样子,红框中所在的部分就叫做应用程序功能区,你都存在于人家的表单上了你怎么能删除呢,当然不行了,所以要么

[教程] wdcp文件管理器里不能删除或移动解压后的文件解决方法

问题:在本地上传压缩包到服务器之后,在wdcp文件管理器里解压,解压之后想把文件移动到其他目录,填写好移动的目标目录之后点移动,显示移动成功,但到目标目录却发现没有自己所移动的文件,文件不知道消失到哪里去了:再看原本解压后的文件夹里也没有文件. 解决方法:看看是不是自己的压缩前的文件夹里有文件名或文件夹名包含中文字符,把他改成英文后再压缩上传,解压之后移动就没问题了:同样,删除不了的文件也可能是你文件名里包含了中文,甚至上传解压之后的文件名已经不是正常中文了,而是乱码! 转自:http://ww