如何在RecyclerView显示时禁用NestedScrollView滚动,隐藏时恢复滚动?
如何在RecyclerView显示时禁用NestedScrollView滚动,隐藏时恢复滚动?
兄弟,我先仔细看了你的问题和代码,发现几个可能导致失效的点,给你一步步分析:
第一个坑:逻辑触发时机是否正确?
先确认你的核心需求:RecyclerView显示时禁用NestedScrollView滚动,隐藏时恢复。你写的代码逻辑本身是对的,但会不会是你在错误的回调里执行了这段代码?比如是不是没把这段逻辑绑定到EditText的点击事件上?
先再明确下正确的逻辑代码,确保没写错:
// 这是EditText点击后的回调方法,用来切换RecyclerView的显示/隐藏 fun onSearchClicked() { if (binding.recyclerViewCities.visibility == View.VISIBLE) { // 隐藏RecyclerView,恢复NestedScrollView滚动 binding.recyclerViewCities.visibility = View.GONE binding.nestedScrollView.isNestedScrollingEnabled = true } else { // 显示RecyclerView,禁用NestedScrollView滚动 binding.recyclerViewCities.visibility = View.VISIBLE binding.nestedScrollView.isNestedScrollingEnabled = false } }
第二个坑:isNestedScrollingEnabled可能不够彻底
有时候只设置isNestedScrollingEnabled = false,NestedScrollView还是会出现滚动的情况,因为触摸事件可能还是会被它接管。这时候可以用更靠谱的方法——给NestedScrollView设置触摸事件拦截:
// 在页面初始化的时候设置这个触摸监听器 binding.nestedScrollView.setOnTouchListener { _, event -> // 当RecyclerView可见时,拦截所有触摸事件,不让NestedScrollView处理 binding.recyclerViewCities.visibility == View.VISIBLE }
这样一来,只要RecyclerView显示着,NestedScrollView就完全接收不到触摸事件,自然不会滚动;当RecyclerView隐藏后,触摸事件会正常交给NestedScrollView处理,恢复滚动。
第三个坑:确保RecyclerView自身能正常滚动
你的RecyclerView高度是固定的300dp,这个设置没问题,但要确保它的isNestedScrollingEnabled属性是true(默认就是true,除非你手动改过),这样它自己才能正常滚动,不会和NestedScrollView的逻辑冲突。
你可以先试试把触摸监听器加上,再确认逻辑触发的时机是否正确,应该就能解决问题啦!
备注:内容来源于stack exchange,提问作者bhaskar
相关产品推荐
相关产品推荐

