如何使用同一适配器在回收者视图上显示多个模型?

2023-12-08

我有两种不同类型的对象(例如:用户和学生),它们都具有不同的属性。

用户: 标题描述;
学生: 标题、描述、USN;

有没有一种方法可以使用相同的适配器首先在回收器视图上显示两个用户,然后显示学生?即使它是两个适配器,我如何显示它。我不想要两个回收者视图。

请注意,给出的示例非常简单。变化不仅仅体现在用户界面上。如果更改仅在 UI 中,则可以使用 getItemViewType(),但这里更改是在模型本身中。

List<Student> and List<User>

我们如何将两个列表设置为同一个适配器?


您必须使用重写方法“getItemViewType(position)”。

然后只需按照这样的 ViewType 返回 ViewHolder,

  @Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    RecyclerView.ViewHolder viewHolder = null;
    LayoutInflater inflater = LayoutInflater.from(parent.getContext());

    switch (viewType) {
        case ITEM:
            View v1 = inflater.inflate(R.layout.item_student, parent, false);
            viewHolder = new UserVH(v1);
            break;
        case LOADING:
            View v2 = inflater.inflate(R.layout.item_user, parent, false);
            viewHolder = new StudentVH(v2);
            break;
    }
    return viewHolder;
}

Edit:

 public class StudentVH extends RecyclerView.ViewHolder {
    //Declare student views

    public ViewHolder(View v) {
        super(v);
        //Inialize student views
    }
}

 public class UserVH extends RecyclerView.ViewHolder {
    //Declare user views

    public ViewHolder(View v) {
        super(v);
        //Inialize user views
    }
}

第二次编辑:

你的适配器应该是这样的,

public class ClGAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context context;
private List<UserBean> userBeans;
private List<StudentBean> studentBeans;
private UserBean userBeanItem;
private StudentBean studentBeanItem;
private int size = 0;


public ClGAdapter(Context context, List<UserBean> userBeans, List<StudentBean> studentBeans) {
    this.context = context;
    this.userBeans = userBeans;
    this.studentBeans = studentBeans;
    this.size = userBeans.size() + studentBeans.size();
}


@Override
public int getItemViewType(int position) {

    if (position > (userBeans.size() - 1)) {
        return 2;//TYPE_STUDENT
    } else {
        return 1; //TYPE_USER
    }
}

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

    int viewType = holder.getItemViewType();

    userBeanItem = userBeans.get(position);
    studentBeanItem = studentBeans.get(position);
    switch (viewType) {
        case 1:
            ((UserHolder) holder).mUserName.setText(userBeanItem.getUserName());
            break;
        case 2:
            ((StudentHolder) holder).mStudentName.setText(studentBeanItem.getStudentName());
            break;
        default:
            break;
    }

}

@Override
public int getItemCount() {
    return size;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    int layout = 0;
    RecyclerView.ViewHolder viewHolder;
    switch (viewType) {
        case 1: 
            layout = R.layout.user_card;
            View userView = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
            viewHolder = new UserHolder(userView);
            break;
        case 2:
            layout = R.layout.student_card;
            View studentView = LayoutInflater.from(parent.getContext()).inflate(layout, parent, false);
            viewHolder = new StudentHolder(studentView);

            break;
        default:
            viewHolder = null;
            break;
    }
    return viewHolder;
}

public class UserHolder extends RecyclerView.ViewHolder {
    private TextView mUserName;

    public UserHolder(View v) {
        super(v);
        mUserName = v.findViewById(R.id.user_name);
    }
}

public class StudentHolder extends RecyclerView.ViewHolder {
    private TextView mStudentName;

    public StudentHolder(View v) {
        super(v);
        mStudentName = v.findViewById(R.id.student_name);
    }
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用同一适配器在回收者视图上显示多个模型? 的相关文章

随机推荐

  • 判断Oracle null == null

    我希望在可为空的列上搜索数据库表 有时我要搜索的值本身就是 NULL 因为 Null 等于什么都没有 甚至是 NULL 所以说 where MYCOLUMN SEARCHVALUE 将失败 现在我必须求助于 where MYCOLUMN S
  • 如何创建充当链接的 TextView

    我有一个Textview地点 例如 加利福尼亚州山景城 我想要实现的是创建这个文本以充当链接 颜色 下划线 可聚焦性等 此链接不需要指向任何地方 周围视图已附加 onClick 侦听器 该侦听器会触发谷歌地图意图 像这样的东西应该有效 Te
  • 如何使用部署在 Kubernetes 上的 Flink 运行 Beam Python 管道?

    有谁知道当 Flink 在 Kubernetes 中作为 Pod 运行时如何使用 Flink 运行 Beam Python 管道 我已经成功地使用 Portable runner 和指向在 Docker 容器中运行的本地 Flink 服务器
  • 在android中为ListView中的每一行制作动态布局

    我有一个 xml 文件 其中包含 ListView 每一行的基本布局 这是一个真实的布局 里面有 TextView 我想更改 ListView 每一行的此布局的属性 例如每行的不同布局宽度和高度 我想动态设置宽度和高度的值 有什么办法可以做
  • Cloud Run 在 121 秒后崩溃

    我正在使用 PubSub 主题和订阅触发器触发长时间运行的抓取 Cloud Run 函数 每次我运行它时 它都会在 121 8 秒后崩溃 但我不明白为什么 POST 503 556B 121 8s APIs Google https dev
  • Android 中的 NETWORK_ERR:XmlHttpRequest 异常 101

    我正在为 android 手机开发一个移动应用程序 每当我运行它时 我都会收到以下错误 network err xmlhttprequest 异常 101 有人可以澄清一下吗 我使用的是安卓4 2版本 下面的代码是mainActivity
  • 使用 PIL 和 SKIMAGE 打开 PGM 文件时出错

    我有以下图像文件 Image 我使用 PIL 和 Skimage 打开它 但出现以下错误 首先使用 PIL 尝试使用和不使用 trucate 选项 代码 from PIL import Image ImageFile ImageFile L
  • 将 8 位整数转换为 dd/mm/yyyy [重复]

    这个问题在这里已经有答案了 所以我在我的 PHP 脚本中有这个函数 它应该将日期作为 8 位整数 例如01042012并将其转换为01 04 2012用于显示 目前我正在尝试使用 phpdate 函数如下 int 01042012 date
  • 以编程方式动态生成 Azure Function 的访问代码

    我有几个 Azure 函数 用 c 编写 我已将其 URL 提供给不同的团队来调用 调用 我注意到后缀的访问代码始终相同 因此存在安全风险 有没有一种方法可以让我们以编程方式动态生成 Azure 函数的访问代码并将其附加到函数的 URL 中
  • 自定义圆形进度条,图像位于中心[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 对于我的 Android 应用程序 我想将图像放入circular progress bar 预期设计 http hpics li cd6acba 关于如何做到这一点有什么想法吗
  • 调用存储在 std 映射中的成员函数指针

    我将映射存储在一个类中 该类以字符串作为键 以指向成员函数的指针作为值 我在调用正确的函数时遇到问题 抛出函数指针 这是代码 include
  • 无法安装弹性表

    我安装时遇到问题Flextable 这似乎是因为gdtools包裹 看起来像gdtools依赖 dylib 文件 有任何想法吗 gt install packages flextable There is a binary version
  • Python:如何引用实例名称? [复制]

    这个问题在这里已经有答案了 我使用以下代码收集实例 class Hand instances def init self Hand instances append self self value 5 def do something se
  • 在 EC2 实例上运行 jupyter 笔记本

    我在我的 AWS 账户上设置了一个 cloud 9 实例 我使用诗歌作为我的包管理器并安装了 jupyter 笔记本 当我运行命令时poetry run jupyter notebook它像平常一样运行 但是当我按下链接时 他们说无法访问该
  • 为什么不能在带有背景的锚元素上设置行高? [复制]

    这个问题在这里已经有答案了 我刚刚意识到带有背景的锚标记只会继承它们的行高 并且您只能通过将锚设置为显示来直接设置它 inline block 为什么是这样 http jsfiddle net moefinley 3H3y5 ul li a
  • Atmel SAM3X 双组切换不起作用

    我目前正在使用 Atmel SAM3X8 ARM 微控制器 该微控制器具有双组 2 x 256KB 闪存 我正在尝试实现固件更新功能 将新固件放入当前未使用的闪存库中 完成后使用闪存重新映射交换库以运行新固件 数据表指出 为此我需要设置 G
  • Roxygen2:记录重载 R 基函数时用作 S4 的 S3 类(cor)

    我有以下背景 我确实超载cor基本函数 以便我在我的包 R 文件中包含以下语句 export setGeneric cor 现在我想为我的对象创建一个特定的函数 名为stranger 这里为了简单起见 我只认为我的对象是一个 data ta
  • Selenium Webdriver:Firefox 与 PhantomJS 的 HTML 呈现方式不同

    我正在 Node JS 中使用 Selenium Webdriver 进行 Google 搜索 当我在本地计算机上将浏览器设置为 Firefox 时 Google 结果页面将按预期呈现 这和我作为人类进行谷歌搜索时看到的一样 现在 我尝试在
  • Microsoft Interop saveAs 命令失败

    我有一个简单的控制台应用程序 可以使用 Microsoft Office Interop API 将 Word 文档转换为 PDF 由于某种原因 这个文档总是失败 我已将其附加并删除了所有无关的内容 点击这里 由于某种原因 当您打开文档并在
  • 如何使用同一适配器在回收者视图上显示多个模型?

    我有两种不同类型的对象 例如 用户和学生 它们都具有不同的属性 用户 标题描述 学生 标题 描述 USN 有没有一种方法可以使用相同的适配器首先在回收器视图上显示两个用户 然后显示学生 即使它是两个适配器 我如何显示它 我不想要两个回收者视