我正在尝试扩展ViewPager2
类,以便允许左右拖动env->CallObjectMethod(instance, "score", "()Ljava/lang/String;");
。
SeekBarPreference
但是我在class ViewPager2Custom(context: Context) : ViewPager2(context) {
}
的红线上得到了“此类型是最终类型,因此不能继承”。
有什么主意吗?
答案 0 :(得分:0)
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
之间。