Ris*_*876 4 android android-viewpager android-recyclerview android-nestedscrollview
我在复杂的层次结构中有一个水平 RecyclerView,看起来像这样 -
<ViewPager id="+@id/first">
<ViewPager id="+@id/second"> this viewpager is taking away the scroll event
<SwipeToRefreshLayout>
<RecyclerView> //this one is vertical
<RecyclerView id="@id/rv1"> //this one is horizontal
<RecyclerView id="@id/rv2"> //this one is working fine (different type)
</RecyclerView>
</SwipeToRefreshLayout>
</ViewPager>
</ViewPager>
Run Code Online (Sandbox Code Playgroud)
现在的问题是第二个 ViewPager 正在劫持 Horizontal RV 的滚动条。该垂直 RV 中有 2 种类型的水平 RV(RV1 和 RV2)。但只有其中一个(RV1)面临这个问题。第二个 (RV2) 工作正常。此外,当我按住然后滚动工作正常。当 RV1 已经在滚动并且尚未稳定时,滚动也可以正常工作。我已经提到了其他关于设置 NestedScrolling false 的答案。似乎没有任何工作。

Ast*_*liu 10
您可以通过覆盖 onInterceptTouchEvent 方法来实现这一点:
mRecyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}
@Override
public void onTouchEvent(@NonNull RecyclerView view, @NonNull MotionEvent event) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
Run Code Online (Sandbox Code Playgroud)
这个答案是 @Astril Veliu 答案的 Kotlin 版本
yourRecyclerView.addOnItemTouchListener(object : RecyclerView.OnItemTouchListener {
override fun onTouchEvent(view: RecyclerView, event: MotionEvent) {}
override fun onInterceptTouchEvent(view: RecyclerView, event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
yourRecyclerView.parent?.requestDisallowInterceptTouchEvent(true)
}
}
return false
}
override fun onRequestDisallowInterceptTouchEvent(disallowIntercept: Boolean) {}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1610 次 |
| 最近记录: |