0

enter code here私はrecyclerviewを使用していますが、もう1つリサイクルビューのアダプタレイアウト内に recyclerviewを実装する必要があります。 誰でも私にjsonデータをrecyclerview に設定することができます。これはVerticsalリサイクラのcardviewの内側にあります。私はそれを非常によく知っている水平なrecyclerviewを設定する方法について について教えてください。 私の問題は、私はあなたが垂直RecyclerViewのアダプタにList>を渡し、その後onBindViewHolderで、で、内側のリストを渡すことができ、垂直recyclerviewのcardview横型リサイクルビュー内縦型リサイクルビューアアダプタ

+0

これまでに試したコードを追加してください。 – Gustavo

答えて

0

内にある recyclerviewにデータを設定する方法という混乱していますということですいくつかのインデックスiを水平RecyclerViewのアダプタのコンストラクタに渡します。外側の垂直RecyclerViewについては

0

、この拡張クラスを使用します。内側の水平RecyclerViewについては

public class BetterRecyclerView extends RecyclerView{ 
    private static final int INVALID_POINTER = -1; 
    private int mScrollPointerId = INVALID_POINTER; 
    private int mInitialTouchX, mInitialTouchY; 
    private int mTouchSlop; 
    public BetterRecyclerView(Context context) { 
    this(context, null); 
    } 

    public BetterRecyclerView(Context context, @Nullable AttributeSet attrs) { 
    this(context, attrs, 0); 
    } 

    public BetterRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    final ViewConfiguration vc = ViewConfiguration.get(getContext()); 
    mTouchSlop = vc.getScaledTouchSlop(); 
    } 

    @Override 
    public void setScrollingTouchSlop(int slopConstant) { 
    super.setScrollingTouchSlop(slopConstant); 
    final ViewConfiguration vc = ViewConfiguration.get(getContext()); 
    switch (slopConstant) { 
     case TOUCH_SLOP_DEFAULT: 
     mTouchSlop = vc.getScaledTouchSlop(); 
     break; 
     case TOUCH_SLOP_PAGING: 
     mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(vc); 
     break; 
     default: 
     break; 
    } 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent e) { 
    final int action = MotionEventCompat.getActionMasked(e); 
    final int actionIndex = MotionEventCompat.getActionIndex(e); 

    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
     mScrollPointerId = MotionEventCompat.getPointerId(e, 0); 
     mInitialTouchX = (int) (e.getX() + 0.5f); 
     mInitialTouchY = (int) (e.getY() + 0.5f); 
     return super.onInterceptTouchEvent(e); 

     case MotionEventCompat.ACTION_POINTER_DOWN: 
     mScrollPointerId = MotionEventCompat.getPointerId(e, actionIndex); 
     mInitialTouchX = (int) (MotionEventCompat.getX(e, actionIndex) + 0.5f); 
     mInitialTouchY = (int) (MotionEventCompat.getY(e, actionIndex) + 0.5f); 
     return super.onInterceptTouchEvent(e); 

     case MotionEvent.ACTION_MOVE: { 
     final int index = MotionEventCompat.findPointerIndex(e, mScrollPointerId); 
     if (index < 0) { 
      return false; 
     } 

     final int x = (int) (MotionEventCompat.getX(e, index) + 0.5f); 
     final int y = (int) (MotionEventCompat.getY(e, index) + 0.5f); 
     if (getScrollState() != SCROLL_STATE_DRAGGING) { 
      final int dx = x - mInitialTouchX; 
      final int dy = y - mInitialTouchY; 
      final boolean canScrollHorizontally = getLayoutManager().canScrollHorizontally(); 
      final boolean canScrollVertically = getLayoutManager().canScrollVertically(); 
      boolean startScroll = false; 
      if (canScrollHorizontally && Math.abs(dx) > mTouchSlop && (Math.abs(dx) >= Math.abs(dy) || canScrollVertically)) { 
      startScroll = true; 
      } 
      if (canScrollVertically && Math.abs(dy) > mTouchSlop && (Math.abs(dy) >= Math.abs(dx) || canScrollHorizontally)) { 
      startScroll = true; 
      } 
      return startScroll && super.onInterceptTouchEvent(e); 
     } 
     return super.onInterceptTouchEvent(e); 
     } 

     default: 
     return super.onInterceptTouchEvent(e); 
    } 
    } 
} 

を、この拡張クラスを使用します。

public class FeedRootRecyclerView extends BetterRecyclerView{ 
    public FeedRootRecyclerView(Context context) { 
    this(context, null); 
    } 

    public FeedRootRecyclerView(Context context, @Nullable AttributeSet attrs) { 
    this(context, attrs, 0); 
    } 

    public FeedRootRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    } 

    @Override 
    public void requestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
    /* do nothing */ 
    } 
} 

あなたはどのようなこれらのクラスについての適切な説明を見つけることができますここをクリックしてください:http://nerds.headout.com/fix-horizontal-scrolling-in-your-android-app/

+0

複数の質問に[同じ回答](http://stackoverflow.com/a/41940784/4687348)を追加しないでください。最良のものに答え、残りを重複としてフラグを立てる。 「[複数の質問に重複した回答を追加することは可能ですか?](http://meta.stackexchange.com/q/104227/347985)を参照してください。 – FelixSFD

関連する問題