SwipeMenuListView与SwipeRefreshLayout之间下拉刷新和侧滑菜单功能的冲突处理方案


问题具体描述

在使用Android Studio开发APP过程中,为了实现下拉刷新和侧滑删除功能,本人采用了SwipeMenuListView布局和SwipeRefreshLayout布局(前者嵌入在后者内部),功能实现后在使用中出现问题:侧滑是容易触发刷新功能,导致操作卡顿。


一、解决思路

在JAVA文件中编写,根据SwipeMenuListView的状态,在滑动布局过程中间禁止刷新操作,滑动结束后开启刷新功能,使二者不能并行,从而解决冲突。

二、使用到的相关函数

SwipeMenuListView布局:
setOnMenuStateChangeListener();//用于判断是Item的菜单是否打开,即是否处于左滑状态
setOnSwipeListener();//用于判断是否滑动
SwipeRefreshLayout布局:
setEnabled();//用于开启或关闭下拉刷新功能
自定义变量参数:
int flag_state_menu=0;//用来标记菜单状态

三、关键代码

代码如下(示例):

    private SwipeMenuListView listView_doing;
    private SwipeRefreshLayout mSwipeRefreshLayout;
    private int flag_state_menu=0;  //默认Item菜单为关闭状态
    listView_doing.setOnMenuStateChangeListener(new SwipeMenuListView.OnMenuStateChangeListener() {
            @Override
            public void onMenuOpen(int position) {
                flag_state_menu=1;
                System.out.println("菜单打开");
                mSwipeRefreshLayout.setEnabled(false);
            }
            @Override
            public void onMenuClose(int position) {
                flag_state_menu=0;
                System.out.println("菜单关闭");
                mSwipeRefreshLayout.setEnabled(true);
            }
        });
      listView_doing.setOnSwipeListener(new SwipeMenuListView.OnSwipeListener() {
            @Override
            public void onSwipeStart(int position) {
                mSwipeRefreshLayout.setEnabled(false);
                System.out.println("侧滑了一下");
            }
            @Override
            public void onSwipeEnd(int position) {
                if(flag_state_menu==0)
                     mSwipeRefreshLayout.setEnabled(true);
                System.out.println("侧滑结束");
            }
        });

总结

因为本人的安卓开发经验较少,在网上找到的解决方案并不能很好的实现。目前所找到的另一种解决方案是:采用外部拦截法对SwipeRefreshLayout的onInterceptTouchEventfangf进行重写,主要根据用户滑动的垂直距离差dy和水平距离差dx来决定对事件的拦截与否,我觉得很靠谱,但是我重写的类不能绑定xml文件里SwipeRefreshLayout布局,所以没用。

参考

https://blog.csdn.net/weixin_34014277/article/details/92018914?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165502065116780366565036%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165502065116780366565036&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-92018914-null-null.142^v13^control,157^v14^control&utm_term=SwipeRefreshLayout+SwipeMenuListView&spm=1018.2226.3001.4187

https://blog.csdn.net/coldrain1988/article/details/48182519?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165502065116780366565036%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165502065116780366565036&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-48182519-null-null.142^v13^control,157^v14^control&utm_term=SwipeRefreshLayout+SwipeMenuListView&spm=1018.2226.3001.4187
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值