android RecyclerView和带有Map而不是列表的RecyclerView适配器

jslywgbw  于 2023-03-16  发布在  Android
关注(0)|答案(1)|浏览(234)

我有一个RecyclerView和一个带有两个列表的RecyclerView适配器,我需要切换到mutableMaps。
itemList保存用于显示数据的视图,而skillList保存包含数据的Skill对象。
问题是,views对象多于Skill对象。例如,我创建了一个技能,而Skill有一个id、一个图片和一个音频文件。例如,viewPic显示图片,viewMp3显示音频文件,viewId显示Skill对象的id。
原因是用户能够显示不同按钮按下时的数据。
现在,我希望避免无法将正确的数据绑定到position的正确视图的问题。

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
        val currentViewItem= itemList[position]
        val currentSkillItem=skillList[position]
        when(holder){
            is SkillbarViewHolder ->{

            }
            is SkillTextViewHolder ->{
                //holder.add_skill_add_text_textview.text=currentSkillItem.addSkillTextCont
            }
            is SkillUploadViewHolder ->{

            }
            is SkillMicroViewHolder ->{

我找不到将对象的正确数据绑定到正确视图的方法,因为多个views使用相同的对象数据,所以列表大小不同。
这是我的适配器类OldAdapterclass
这是我的活动Activity
现在,我想将itemList更改为mutableMap〈index,View〉,并将skillList更改为mutableMap〈index,Skill〉
我想达到这样的目标:

addBarButton()
        create var index 
        calls createSkill()
        in SkillbarAdapter createSkill() 
            creates Skill
            skillList.put(index,Skill)
        In SkillbarAdapter addSkillView()
            itemList.put(index,View)
            view.tag=“xxx"

如果addBarButton被调用,它会设置index +1,并使用该index创建Skill(键为index)。然后视图会被添加到itemList的键index处,以便稍后我可以确定哪个视图连接到哪个Skill对象。由于标签,我还可以看到它是什么类型的视图。我希望我解释清楚了。
因此,尝试相应地更改Adapterclass,但我在getItemViewType方法中抛出错误,表明viewtype无效。
NewAdapterclass
你知道我在循环视图适配器中的Map做错了什么吗??我也不知道我应该如何改变getItemViewType方法。
错误为:Error
无效的视图类型意味着位置顺序索引有错误,视图没有正确的放入itemList或者没有视图,我猜.因为我检查了getItemViewType是否是视图,如果不是,那么它抛出一个异常.

ozxc1zmp

ozxc1zmp1#

问题

你做的事情是相反的。你在onCreateViewHolder中设置视图标签。但是你会注意到onCreateViewHolderviewType中被传递。这意味着getViewType必须在onCreateViewHolder之前被调用,以知道为什么类型创建ViewHolder。但是你的getViewType依赖于view.tag属性,而view.tag属性还没有被设置。因此你犯了错误。

解决方案

您不应该使用view.tag作为创建类型的决定因素。根据定义,getViewType还不知道存在哪些视图-该函数本身决定将为给定位置创建哪些视图。
您需要对其进行更改,以便在给定项目列表和传入的位置值的情况下返回正确的视图类型。这是只有您自己知道的业务逻辑。

  • 给定skillListitemList中的项目列表,position中的视图应该是什么类型?*

相关问题