问题具体描述
在使用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