解决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简介
推荐阅读
-
解决JavaEE开发中字符编码出现乱码的问题
-
Hbase、elasticsearch整合中jar包冲突的问题解决
-
Android编程向服务器发送请求时出现中文乱码问题的解决方法
-
mysql启动时出现ERROR 2003 (HY000)问题的解决方法
-
如何解决js函数防抖、节流出现的问题
-
Android中DrawerLayout+ViewPager滑动冲突的解决方法
-
C#中Datetimepicker出现问题的解决方法
-
解决python字典对值(值为列表)赋值出现重复的问题
-
Orace查询数据出现乱码的问题解决思路
-
解决Node.js使用MySQL出现connect ECONNREFUSED 127.0.0.1:3306的问题