Java 具有动态大小元素的RecyclerView

Java 具有动态大小元素的RecyclerView,java,android,material-design,android-recyclerview,Java,Android,Material Design,Android Recyclerview,我正在尝试从listview切换到recyclerview,但似乎不知道如何最好地回收视图。我想要的是cardview中的一组cardview。数据集类似于不同班级的一群学生。每一个班级都有不同的规模,他们将在同一张卡片上表现出来 我现在看到的是下面的xml,其中“tv1”将包含类的标题,学生姓名将动态添加到“card_ll”中。我遇到的问题是,我手动膨胀每个学生姓名的视图,并根据班上有多少学生添加/清除线性布局。请注意,学生人数不是零,但无法事先确定 有没有办法重用每张学生卡的视图 谢谢 xm

我正在尝试从listview切换到recyclerview,但似乎不知道如何最好地回收视图。我想要的是cardview中的一组cardview。数据集类似于不同班级的一群学生。每一个班级都有不同的规模,他们将在同一张卡片上表现出来

我现在看到的是下面的xml,其中“tv1”将包含类的标题,学生姓名将动态添加到“card_ll”中。我遇到的问题是,我手动膨胀每个学生姓名的视图,并根据班上有多少学生添加/清除线性布局。请注意,学生人数不是零,但无法事先确定

有没有办法重用每张学生卡的视图

谢谢

xml:


你做错了。您必须将ListView更改为RecyclerView。CardView可以是RecyclerView am使用RecyclerView使用的项目。这就是onBindViewHolder的来源。当视图是动态的时,我找不到一种方法来回收保持架中的视图。也许这个方法是来自适配器的public int getItemViewType(int position)方法,这正是您想要的。但我认为,根据课堂上有多少学生,无限多的项目类型是不可行的。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent">
<android.support.v7.widget.CardView
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view1"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="5dp"
    card_view:cardCornerRadius="2dp">

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

        <TextView
            android:id="@+id/tv1"
            android:textColor="#000000"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.v7.widget.CardView
            xmlns:card_view="http://schemas.android.com/apk/res-auto"
            android:id="@+id/card_view2"
            android:layout_gravity="center"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="15dp"
            card_view:cardCornerRadius="2dp">
            <LinearLayout
                android:id="@+id/card_ll"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:gravity="center_vertical"
                android:orientation="vertical" >

            </LinearLayout>

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

</android.support.v7.widget.CardView>
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
     final ClassType ec = mDataset.get(position);
    final String name = ec.classtitle;

    holder.tv1.setText(ec.header1);

    if( ec.studentlist!=null && ec.studentlist.size()>0) {
        holder.cardll.removeAllViews();
        for (Student s:        ec.studentlist) {
            TextView tv = new TextView(mContext);
            tv.setText( s.getName());
            tv.setTextColor(Color.BLACK);
            holder.cardll.addView(tv);
        }
    }
}