微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提交新列表时,RecyclerView 项目 ViewStubs 不更新

如何解决提交新列表时,RecyclerView 项目 ViewStubs 不更新

我有一个适配器类,它扩展了 listadapter 管理我的 RecyclerView。

在每个显示的项目中都有一个 ViewStub,它有一个布局 ID,在 ViewHolder 的 bind() 方法中分配和膨胀,我在适配器的 onBindViewHolder() 期间调用方法

这个 ViewStub 的目的是使用适合我试图获取输入的变量类型的布局来膨胀,即如果变量是 Int,则 stub_integer_input.xml 被膨胀;如果它是一个字符串,stub_text_input.xml 是膨胀等。

这样我就可以获取扩展我的基类的任何数据类,并为我想要填充的所有属性动态创建输入。 (这有效)

我需要能够根据其他字段中的值显示/隐藏某些字段。 (这也有效)。

我的问题是,当我使用 submitList() 更新要显示的项目时,这些项目最终会出现错误的 ViewStub。

例如

(0)stub_integer_input    del(1)   (0)stub_integer_input
(1)stub_integer_input     ->      (1)stub_integer_input
(2)stub_text_input     (1 should be stub_text_input!^^^)

就好像不是删除 (1) 并在下移索引后移动所有元素,而是删除 (2) 并将项目数据重新映射到 (1),这增加了不同的布局存根。鉴于 listadapter 是为提高效率而设计的,这是有道理的,但我仍然需要一种解决方法;我只是不确定如何。

我已经验证数据类保持不变,要膨胀的数据绑定值/类型/布局也没有改变并保持正确,即使 ViewStub 有。

我该如何解决这个问题?我已经尝试过 submitList(emptyList()) 和更新后的列表,但这似乎没有任何区别。有没有办法可靠地将 ViewStubProxy 恢复为 ViewStub,然后在它不正确时用正确的布局重新充气它?欢迎任何其他解决方案。

编辑: 我试图将整个列表显示为一种变通方法,并只调用 adapter.notifyDataSetChanged() 来更新字段中的值,但似乎所有布局都被完全打乱了,无论我是否实际提交了一个新列表不同的顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。