enter code here
ich benutze recyclerview aber ich muss eine weitere recyclerview innerhalb der adapter layout der recyclerview implementieren. Kann jemand mir sagen, wie kann ich die JSON-Daten auf die Recyclerview , die innerhalb der Cardview von Verticals Recycler ist. Erzähl mir nicht über, wie man die horizontale recyclerview einstellt, die ich sehr gut kenne. das Problem mit mir ist, dass ich verwirrt bin, dass, wie die Daten zu recyclerview setzen, diehorizontale recyclerview innerhalb der vertikalen recycerview adapter
Antwort
Sie können ein List>
zum vertikalen RecyclerView des Adapters und dann in den onBindViewHolder
passieren innerhalb cardview von vertikalem recyclerview ist, passieren die innere Liste an einige Index i
zum Konstruktor des horizontalen RecyclerView-Adapters.
Für die äußere vertikale RecyclerView, benutzen Sie diese erweiterten Klasse:
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);
}
}
}
Für die innere horizontale RecyclerView, diese erweiterte Klasse verwenden:
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 */
}
}
Sie die richtige Erklärung, was diese Klassen finden Machen Sie hier: http://nerds.headout.com/fix-horizontal-scrolling-in-your-android-app/
Bitte fügen Sie [die gleiche Antwort] (http://stackoverflow.com/a/41940784/4687348) nicht mehreren Fragen hinzu. Beantworte die beste und markiere den Rest als Duplikate. Siehe [Ist es akzeptabel, mehreren Fragen eine doppelte Antwort hinzuzufügen?] (Http://meta.stackexchange.com/q/104227/347985) – FelixSFD
Könnten Sie bitte den Code hinzufügen, den Sie bisher versucht haben? – Gustavo