我在我的 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/