android - 带有 FragmentStateAdapter 嵌套滚动问题的 ViewPager2
问题描述
我已经使用 和 Fragments 设置了我的活动ViewPager2
布局BottomNavigationView
。在我的第一个片段中ViewPager2
包含一个ImageSlider
.
当我滚动 ImageSlider 时,整个片段(在 中ViewPager2
)滚动到第二个片段。为什么会这样?
然后我改为 NormalViewPager
而不是ViewPager2
和FragmentPagerAdapter
而不是FragmentStateAdapter
,它完美地工作,不幸FragmentPagerAdapter
的是被弃用了。?
布局
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
活动
val adapter = ViewPagerAdapter(this)
viewPager.adapter = adapter
ViewPagerAdapter
const val FRAGMENT_COUNT = 4;
class ViewPagerAdapter(activity: FragmentActivity): FragmentStateAdapter(activity){
override fun getItemCount() = FRAGMENT_COUNT
override fun createFragment(position: Int): Fragment {
return when(position) {
0 -> HomeFragment()
1 -> DepartmentFragment()
2 -> ConnectFragment()
3 -> SocialFragment()
else -> HomeFragment()
}
}
}
解决方案
拦截 ViewPager2 触摸监听器是不可能的,因为我们不能像在 ViewPager 中那样扩展它,因为这个 viewpager 不允许任何嵌套视图滚动。因此,您需要在 viewpager2 周围编写一个包装视图,该视图将处理此触摸拦截器并允许其他视图接收滚动。
签出 Google ViewPager2 示例中的NestedTabSroller类。这堂课会解决你的问题
推荐阅读
- vba - VBA 循环:将范围从多个工作表复制到多个集合位置
- javascript - 深度搜索属性值后返回对象
- elasticsearch - Elasticsearch - 如何结合来自多个领域的术语建议?
- python - 检查对象是否可见(使用当前 xlim / ylim)
- r - R-算术不尊重逻辑非运算符和运算顺序?
- python - sqlite3.OperationalError:没有这样的列:错误
- tensorflow - 张量流或pytorch中的分区矩阵乘法
- python - 表单集数据初始化
- javascript - 将音频从 youtube 流式传输到 html 音频标签
- oracle - 有没有办法将 SQL Server 的脚本转换为 Oracle 的脚本