为啥Android ViewPager2 类是final?
Posted
技术标签:
【中文标题】为啥Android ViewPager2 类是final?【英文标题】:Why is the Android ViewPager2 class final?为什么Android ViewPager2 类是final? 【发布时间】:2020-01-27 03:55:59 【问题描述】:在我当前的项目中使用ViewPager2
时,我想使用setOnTouchListener
,但我无法获得任何事件。
我决定扩展 ViewPager2 类以覆盖触摸事件方法,但由于类定义是最终的,因此无法实现。
为什么这个类是最终的,有什么方法可以扩展它以便我可以覆盖触摸事件?
【问题讨论】:
这是 alpha atm,因此您仍然可以提交问题 in Google's tracker for VP2。但是,someone already beat you to it 太好了,有人已经提交了,但我不认为它是白做的,所以我想知道原因 【参考方案1】:嗯,我认为他们从一开始就搞定了整个 viewpager。最喜欢,因为片段代码中的所有片段也被搞砸了。
他们甚至要求我们不要使用来自全新 androidx 的普通 viewpager,因为它有错误。我认为报告的一些错误现在是旧代码,试图修复旧 viewpager 实现中的问题。我认为他们现在的代码足够稳定,可以使用,并且不希望我们在过渡到 viewpager2 时实施所有现在不必要且可能适得其反的修复。
我对过去懒惰的 google 处理整个片段和 viewpager 的东西感到非常生气。它说明了他们从未在主代码库中使用它,并且总是建议使用兼容包。
简而言之。现在,经过多年的努力,他们开始工作了,他们希望你放弃所有现在不再需要的修复。
【讨论】:
我不喜欢 ViewPager2。滑动动画时甚至无法控制速度。它看起来很蹩脚。由于动画缓慢,我的 ActionBar 菜单项在切换到另一个片段时需要一些时间来显示【参考方案2】:可能是final
,因为它不是扩展它的想法
...而且该关键字在防止这种情况方面非常有效。
【讨论】:
如果我想自定义行为怎么办?并且之前的浏览器不是最终的 只需使用ViewPager
或从源代码构建它,然后您可以删除final
关键字...但可能出于某种原因将ViewPager2
设置为final
。 issuetracker.google.com/issues/140751461
确定他们不是无缘无故的,我希望有人告诉我们原因
@AhmedElshaer 只需关注问题跟踪器上的上述错误......但已经两周没有反应,这可能会导致“按预期工作,无法修复”。 issuetracker.google.com/issues/135299048 透露,他们不会在 1.0.0
stable 发布之前添加功能。
@MartinZeitler 如果您只知道需要自定义多少子类才能使其工作。 ..可能 6..【参考方案3】:
你可以使用viewPage2里面的recyclerView的onTouch。
fun ViewPager2.getRecyclerView(): RecyclerView
val recyclerViewField = ViewPager2::class.java.getDeclaredField("mRecyclerView")
recyclerViewField.isAccessible = true
return recyclerViewField.get(this) as RecyclerView
用法
pager2.getRecyclerView().setOnTouchListener view, motionEvent ->
false
【讨论】:
以上是关于为啥Android ViewPager2 类是final?的主要内容,如果未能解决你的问题,请参考以下文章