欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决BottomSheetDialog+Listview出现的滑动冲突问题

程序员文章站 2022-06-17 18:52:06
...

BottomSheetDialog是一种可以从屏幕底端出现,上下滑动即可关闭或展开的对话框布局,因为其扩展性、易用性强,占用布局面积小等优势深受开发者的喜爱,具体可以参见我之前的文章:《BottomSheetDialog沉浸式的一些坑》( http://www.jianshu.com/p/08755838c00f )有相关介绍。

正常情况下在BottomSheetDialog中嵌套滑动布局的不会出现任何问题的,但当你嵌套Listview时就可能出现如下的滑动冲突问题了:

问题复现

1.前提:当BottomSheetDialog完全展开(全屏)的情况下;
2.列表内容高度撑起整体布局高度,并大于屏幕高度的情况下;
3.向上滑动列表到列表底部;
4.向下滑动,发现列表没动,BottomSheetDialog却被滑动了,导致此时容易误操作关闭BottomSheetDialog。

解决方案:

1.在列表滑动事件截获Touch触摸事件;
2.判断列表处于顶端时才取消截获Touch触摸事件
完美解决!

代码中isListAtTopFlag 为列表是否处于顶端的Flag,名为listTask的列表处于顶端时释放Touch触摸事件的方法,让BottomSheetDialog获取触摸事件即可。
相关代码如下:

        listTask.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (!listTask.canScrollVertically(-1)) {      //canScrollVertically(-1)的值表示是否能向下滚动,false表示已经滚动到顶部
                    listTask.requestDisallowInterceptTouchEvent(false);
                }else{
                    listTask.requestDisallowInterceptTouchEvent(true);
                }
                return false;
            }
        });

以上。
如果本文对您有所帮助麻烦点个赞,如有疑问欢迎在评论区留言交流。

上一篇: ListView效率的提高

下一篇: JSON简介