Recycler视图内部的Recycler视图不滚动

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)


mys*_*yst 5

前段时间我在实现回收器视图时遇到了同样的问题。两个回收器视图都会开始滚动,对吧。虽然使用嵌套回收器视图是一个坏主意,但如果您希望它正确滚动,则必须禁用内部视图的滚动。我不确定,但我想就是这个。让我知道它是否有效。如果没有,我会挖掘我的代码并尝试找到解决方案。

RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(parent.getContext()) {
            @Override
            public boolean canScrollVertically() {
                return false;
            }
        };
Run Code Online (Sandbox Code Playgroud)