android - 使用两个 Viewholder 在 RecyclerView 中查看重叠

标签 android android-recyclerview android-viewholder

我在我的 RecyclerView 中使用了 2 个 ViewHolders A 和 B,其中 A 位于每 4 个位置。但问题是,在每第 4 个位置,A 与 B 重叠。B 的第 4 个 View 隐藏在 A 下方。我如何跳过 B 的每第 4 个位置并在那里显示 A。

这是我的代码。

public class A extends RecyclerView.ViewHolder {
......Code
}


public class B extends RecyclerView.ViewHolder {
......Code
}

@Override
public int getItemViewType(int position) {
        return (position % 4 == 3) ? A : B;
    }         
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    if (viewType == A) {
        View view = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.view_A, parent, false);
        return new A(view);

    } else {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.view_B, parent, false);
        return new B(v);
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, final int position) {

    if (holder.getItemViewType() == A) {
        .....Code
    } else {
        ......Code        
}
}

View_B.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoBt xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/videoLayout"
          android:orientation="vertical"
          android:layout_width="match_parent"
          android:layout_height="wrap_content">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    app:cardBackgroundColor="@color/colorPrimary"
    app:cardElevation="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <ImageView
            android:id="@+id/videoListImage"
            android:layout_width="fill_parent"
            android:layout_height="210dp"
            android:scaleType="fitXY"/>

        <TextView
            android:id="@+id/videoHeading"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textColor="@color/colorSecondary"
            android:textStyle="bold"
            android:padding="12dp"
            android:textSize="18sp"/>

    </LinearLayout>

</android.support.v7.widget.CardView>

View_A.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/adLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<android.support.v7.widget.CardView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="10dp"
    app:cardBackgroundColor="@color/colorPrimary"
    app:cardElevation="5dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <com.facebook.ads.MediaView
            android:id="@+id/adMedia"
            android:layout_width="fill_parent"
            android:layout_height="210dp"
            android:scaleType="fitXY" />

        <ImageView
            android:id="@+id/adImage"
            android:layout_width="fill_parent"
            android:layout_height="210dp"
            android:scaleType="fitXY" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">

            <ImageView
                android:id="@+id/adIcon"
                android:layout_width="50dp"
                android:layout_height="50dp"
                android:layout_marginEnd="8dp"
                android:layout_marginLeft="8dp"
                android:layout_marginRight="8sp"
                android:layout_marginStart="8sp"
                android:layout_marginTop="8sp" />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/adHeading"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="18dp"
                        android:layout_marginRight="8dp"
                        android:padding="4dp"
                        android:textColor="@color/colorSecondary"
                        android:textSize="16sp"
                        android:textStyle="bold" />

                    <ImageView
                        android:id="@+id/mAdChoice"
                        android:layout_width="14dp"
                        android:layout_height="14dp"
                        android:layout_alignParentEnd="true"
                        android:layout_alignParentRight="true"
                        android:layout_margin="3dp" />
                </RelativeLayout>

                <LinearLayout
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:orientation="horizontal">

                    <TextView
                        android:id="@+id/adSocialContext"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:padding="4dp"
                        android:textColor="@color/colorSecondary"
                        android:textSize="12sp" />

                </LinearLayout>

            </LinearLayout>

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="1">

            <TextView
                android:id="@+id/adBody"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="0.4"
                android:ellipsize="end"
                android:maxLines="2"
                android:paddingBottom="10dp"
                android:paddingEnd="0dp"
                android:paddingLeft="10dp"
                android:paddingRight="0dp"
                android:paddingStart="10dp"
                android:textColor="@color/colorSecondary"
                android:textSize="13sp" />

            <StyledButton
                android:id="@+id/adCallToAction"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="0.6"
                android:background="?android:attr/selectableItemBackground"
                android:textColor="@color/colorSecondary" />

        </LinearLayout>

    </LinearLayout>

</android.support.v7.widget.CardView>

最佳答案

为viewA和viewB的parent linearLayout添加边距

关于android - 使用两个 Viewholder 在 RecyclerView 中查看重叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45231416/

相关文章:

android - createHorizo​​ntalChain 和 createHorizo​​ntalChainRtl 是否交换了?

android - 从 SQLite 迁移到 Android Room Persistence Library

android - RecyclerView 延迟滚动

android - RecyclerView 多 View 类型

java.lang.NullPointerException : Attempt to invoke virtual method 'RecyclerView$ViewHolder.shouldIgnore()' on a null object reference

android - 滚动出屏幕后如何从回收 View 中的 View 中获取值

java - 适配器类错误。创建时不得附加 ViewHolder View

安卓/OpenGL-ES 2.0 : setDebugFlags doesn't do anything?

android - 离线获取经纬度国家

java - 使用 RecyclerView 在屏幕上显示特定数量的列表