Xamarin 使用网格卡的Android回收器视图

Xamarin 使用网格卡的Android回收器视图,xamarin,xamarin.android,Xamarin,Xamarin.android,我有一个回收器视图,其中的卡片呈线性排列,如下所示:这是我当前的界面,我需要一个混合视图的帮助,如第二幅图所示 但我需要一个混合视图,其中包含如下网格:这是我的目标界面 **我需要帮助实现这一目标: 这就是我迄今为止所尝试的 **card.axml**** <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/

我有一个回收器视图,其中的卡片呈线性排列,如下所示:这是我当前的界面,我需要一个混合视图的帮助,如第二幅图所示

但我需要一个混合视图,其中包含如下网格:这是我的目标界面

**我需要帮助实现这一目标: 这就是我迄今为止所尝试的 **card.axml****

 <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp">
        <android.support.v7.widget.CardView
            android:layout_width="match_parent"
            android:layout_height="350dp"
            app:cardCornerRadius="10dp"
            android:layout_margin="6dp">
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <ImageView
                    android:id="@+id/avatar2"
                    android:layout_width="match_parent"
                    android:layout_height="160dp"
                    android:scaleType="centerCrop"
                    android:src="@drawable/cheese_1" />
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical"
                    android:padding="16dp">
                    <TextView
                        android:id="@+id/Text11"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginBottom="8dp"
                        android:maxLines="2"
                        android:textColor="#000"
                        android:textSize="18sp" />
                    <TextView
                        android:id="@+id/Text12"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:maxLines="3"
                        android:textColor="#555" />
                </LinearLayout>
                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content">
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="share"
                        android:theme="@style/PrimaryFlatButton" />
                    <Button
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="explore"
                        android:theme="@style/PrimaryFlatButton" />
                </LinearLayout>
            </LinearLayout>
        </android.support.v7.widget.CardView>
    </RelativeLayout>

SetUpRecyclerView
方法中,使用
GridLayoutManager
而不是
LinearLayoutManager
,跨度计数为2,然后在布局管理器上调用
SetPansizeLookup
。通过自定义跨距大小查找,您可以确定哪些项目将跨越整个布局

一个简单的例子:

SimpleStringRecyclerViewAdapter myAdapter = new SimpleStringRecyclerViewAdapter(recyclerView.Context, dataUse)
GridLayoutManager layoutManager = new GridLayoutManager(recyclerView.Context, 2);
layoutManager.SetSpanSizeLookup(new SpanSizeLookup(myAdapter));
recyclerView.SetLayoutManager(layoutManager);
recyclerView.SetAdapter(myAdapter);
SpanSizeLookup
类:

internal class SpanSizeLookup : GridLayoutManager.SpanSizeLookup
{
    private SimpleStringRecyclerViewAdapter _adapter;
    public SpanSizeLookup(SimpleStringRecyclerViewAdapter adapter) => _adapter = adapter;
    public override int GetSpanSize(int position)
    {
        return _adapter.GetItemViewType(position);
    }
}
在您的
SimpleStringRecycleServiceAdapter
类重写
GetItemViewType
中,这样做符合您决定哪些项跨越整个宽度的方式;我在这里使用IsHeader,但您可以随意使用:

public override int GetItemViewType(int position)
{
    if(mValues[position].IsHeader)
         return 1;
    else
         return 2;
}

您还可以通过返回带有
GetItemViewType
的枚举来进一步自定义它,并在
SpanSizeLookup

中确定span计数。您的问题是什么?我需要帮助创建第二张图中所示的网格卡谢谢,已经解决了问题,按照相同的步骤操作。将标记为答案
internal class SpanSizeLookup : GridLayoutManager.SpanSizeLookup
{
    private SimpleStringRecyclerViewAdapter _adapter;
    public SpanSizeLookup(SimpleStringRecyclerViewAdapter adapter) => _adapter = adapter;
    public override int GetSpanSize(int position)
    {
        return _adapter.GetItemViewType(position);
    }
}
public override int GetItemViewType(int position)
{
    if(mValues[position].IsHeader)
         return 1;
    else
         return 2;
}