使用 RecyclerView 的正确方法?

Correct approach on using RecyclerView?

我的任务是制定一个包含不同类型问题的列表,即一项调查。它可以包括 Integer-Answer-Question、Long-Text-Answer-Question 等类型。

为什么需要列表?因为对于使用该应用程序的人来说,向下滚动回答每个问题比向右滑动或做其他动作更好。

所以我面对使用ListView 或RecyclerView 的困境。我的研究给出了使用 recyclerView 并为我遇到的不同类型的问题设置 viewHolder 的最终结果。

当我意识到有一类问题与它有依赖关系时,斗争就来了;为何如此?如果你select一个选项,那么你必须"show"一些问题,如果你取消select这个选项,那么你必须再次"hide"。

问题是我需要知道每个问题对他们的 viewHolder 的引用,以便 "show" o "hide" 每个问题,但是如果回收者正在回收 viewHolder,那么它可以创建我的逻辑一团糟。

我的准时问题是:我是否在 RecyclerView 中使用了正确的组件?有什么方法可以访问具有唯一引用(如 ID 之类)的 viewHolder? .

如果您需要我展示一些代码,我会很乐意去做。

有价值的信息:

如果您对 notifyDataSetChanged() 的工作原理感兴趣,您可以访问此 link 以获取更多详细信息。

Minas mina的方法是正确的!

如果我没理解错的话,您需要在用户选择选项时隐藏某些类型的问题。


您对视图持有者应该做什么的理解不太正确。视图持有者缓存一堆视图,您稍后在 onBindViewHolder() 中使用到来自 模型对象 .

的 fill-in 数据

实际的模型对象应该在您的适配器中。在你的情况下,像

List<Question> questions

onBindViewHolder() 中,您 fill-in View holder 的字段包含来自 Question 对象的数据。

关于你的问题,你可以做的是在你的 recyclerView 适配器中设置一个标志,例如hideQuestionsOfTypeAtrue,然后在适配器上调用 notifyDatasetChanged()

绑定对象时,检查该标志是否为真,如果是,将需要隐藏的视图的可见性设置为GONE