Nav*_*Nav 5 android vertical-scrolling android-recyclerview nestedrecyclerview
另一个Recycler View内部有一个Recycler View,两者都需要垂直滚动。外部回收站视图正确滚动,但内部回收站视图不滚动。
这是代码:
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ViewActivity.this);
outerRecyclerView.setLayoutManager(mLayoutManager);
ViewAdapter adapter = new ViewAdapter(ViewActivity.this);
outerRecyclerView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
ViewAdapter如下:
public void onBindViewHolder(ViewAdapter.ViewViewHolder holder, int position)
{
//RECYCLER VIEW
//TODO: Inner Recycler view scroll movement
LinearLayoutManager mLayoutManager = new LinearLayoutManager(context);
holder.protocolRecyclerView.setLayoutManager(mLayoutManager);
ViewProtocolAdapter adapter = new ViewProtocolAdapter(context);
holder.protocolRecyclerView.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
我已经在两个回收站视图上尝试了以下方法,但无法解决问题
recyclerView.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
if(rv.getChildCount() > 0) {
View childView = rv.findChildViewUnder(e.getX(), e.getY());
if(childView ==listView) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
rv.requestDisallowInterceptTouchEvent(true);
}
}
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
});
Run Code Online (Sandbox Code Playgroud)
还尝试了这个:
outerRecyclerView.setNestedScrollingEnabled(true);//Does not make any difference
innerRecyclerView.setNestedScrollingEnabled(true);//Recycler View start scrolling but very slowly and sometimes scrolls the outer one.
Run Code Online (Sandbox Code Playgroud)
Man*_*tel 15
将此下面的 ontouch 侦听器应用于内部回收器,该内部回收器可能位于父回收器的适配器中。
RecyclerView.OnItemTouchListener mScrollTouchListener = new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
};
innerrecyclerView.addOnItemTouchListener(mScrollTouchListener);
Run Code Online (Sandbox Code Playgroud)
前段时间我在实现回收器视图时遇到了同样的问题。两个回收器视图都会开始滚动,对吧。虽然使用嵌套回收器视图是一个坏主意,但如果您希望它正确滚动,则必须禁用内部视图的滚动。我不确定,但我想就是这个。让我知道它是否有效。如果没有,我会挖掘我的代码并尝试找到解决方案。
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(parent.getContext()) {
@Override
public boolean canScrollVertically() {
return false;
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6919 次 |
| 最近记录: |