android - “这种类型是最终的,所以它不能被继承” - ViewPager2
问题描述
我正在尝试扩展ViewPager2
课程,以便允许SeekBarPreference
左右拖动。
class ViewPager2Custom(context: Context) : ViewPager2(context) {
}
但是,我的ViewPager2(context)
.
任何想法?
解决方案
NestedScrollableHost 类完全符合您的要求:https ://github.com/android/views-widgets-samples/blob/master/ViewPager2/app/src/main/java/androidx/viewpager2/integration/testapp/ NestedScrollableHost.kt
基本思想是您通过该方法覆盖onInterceptTouchEvent
并请求 NestedScrollableHost 的父级(在本例中为ViewPager2
)以禁止它拦截触摸事件requestDisallowInterceptTouchEvent
。
// Pseudo-code for NestedScrollableHost
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
handleInterceptTouchEvent(event);
return super.onInterceptTouchEvent(event);
}
private void handleInterceptTouchEvent(MotionEvent event) {
// Early return if parent viewpager is null or child can't scroll in same direction as parent
if (getParentViewPager() == null ||
(!canChildScrollVertically(-1f) && !canChildScrollVertically(1f))) {
return;
}
switch (event.getAction()) {
// You can tailor your class to handle the event in the way you want to,
// e.g. do something on down and move events:
case MotionEvent.ACTION_DOWN:
// Disallow the parent (and all subsequent parents) to intercept touch events.
getParent().requestDisallowInterceptTouchEvent(disallow);
case MotionEvent.ACTION_MOVE:
// Some other logic.
}
}
您可以将 NestedScrollableHost 放在XML 中的ViewPager2
和(在您的情况下)之间SeekBarPreference
。
推荐阅读
- c# - 错误 ITMS-90685:CFBundleIdentifier 冲突。CFBundleIdentifier 值为“xamarin.ios.xamarin-framework”的捆绑包不止一个
- android - 我的 NDK 项目无法编译,出现与 CPU 架构相关的问题
- java - 获取完整的项目路径java
- gunicorn - Airflow 的 Gunicorn 正在发送错误日志
- nosql - 使用 N1QL 从 Couchbase 中删除所有内容为空的文档
- c# - Azure Bot Framework Emulator 错误 - System.ArgumentNullException:值不能为空
- swift - 有没有办法模拟视图?
- python - 如何将变量从 Django 传递给 Scrapy?
- java - HttpServlet error in eclipse
- javascript - 根据其他选定的框选项选择框值 - MySQL、JS、HTML