簡體   English   中英

具有多種視圖類型的回收者視圖,kotlin和sqlite

[英]Recycler view with multiple view types,kotlin and sqlite

我很難將其他視圖類型添加到從sqlite數據庫加載的工作回收視圖中。 我希望這是列表末尾的一個按鈕,因為在布局的末尾添加一個按鈕很麻煩,將來我假裝添加更多視圖類型。

我看到了具有多個解決方案的多個示例,但我是一個初學者,而我的Java並不是很好,因為我是通過kotlin學習android studio的。

我試過了 :

擴展回收器視圖支架

-我無法繼續,因為我不了解Java代碼。

使用BaseViewHolder

-我遇到了onCreateViewHolder單元的返回類型和視圖持有者聲明的問題,因此我無法像發現的示例那樣進行操作

我認為我的getItemViewType可以在dbhandler中的光標之后添加一個ID為= -10的1行來在列表末尾獲得不同的視圖類型。

override fun getItemViewType(position: Int) :Int  {
        return if (list[position].id.toInt() == -10 ){
            VIEW_TYPE_FOLLOWER
        }else{
            VIEW_TYPE_HEADER
        }
    }

當我嘗試返回ViewHolder和ViewHolder2時,我對onCreateViewHolder有很多疑問,但我收到了錯誤消息,因此這是我的有效Viewholder。

override fun onCreateViewHolder(p0: ViewGroup, p1: Int): ViewHolder {
        val v = LayoutInflater.from(p0.context).inflate(R.layout.list_layout, p0 , false)
        return ViewHolder(v)
    }

視圖持有人

class ViewHolder(itemView: View) :RecyclerView.ViewHolder(itemView){
        val textViewName = itemView.findViewById(R.id.textViewName)as TextView
        val textViewNameEdit = itemView.findViewById(R.id.textViewNameEdit)as EditText
        val textViewAddress = itemView.findViewById(R.id.priorityLevel) as TextView

        val notas = itemView.findViewById(R.id.notas) as TextView
    }

我希望最后使用其他視圖類型以使其成為按鈕。

第一步必須在適配器中聲明一個字段,如blew

private val EMPTY_ITEM = 0
private val NORMAL_ITEM = 1

因此,下一步您必須創建兩個類型實例viewHolder

inner class MyViewHolder(itemView: View) : ViewHolder(itemView) {
    var title: TextView = itemView.item_text

}

inner class EmptyMyViewHolder(itemView: View) : ViewHolder(itemView) {
    var titleEmpty: TextView = itemView.item_empty_text
}

並創建一個適合viewHolder的新實例

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val inflater = LayoutInflater.from(parent.context)
    return if (viewType == NORMAL_ITEM) {
        val v = inflater.inflate(R.layout.item, parent, false)
        vh = MyViewHolder(v)
        vh as MyViewHolder
    } else {
        val v = inflater.inflate(R.layout.item_empty, parent, false)
        vh = EmptyMyViewHolder(v)
        vh as EmptyMyViewHolder
    }
}

不要忘記重寫getItemViewType

override fun getItemViewType(position: Int): Int {
    return when (getItems()[position]) {
        is EmptySampleModel -> EMPTY_ITEM
        else -> NORMAL_ITEM
    }
}

最后一步將項目與適當的數據綁定

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    when (holder) {
        is MyViewHolder -> {
            vh = holder
            val model = getItems()[position] as SampleModel
            (vh as MyViewHolder).title.text = model.getId().toString()
        }
        else -> {
            vh = holder
            val model = getItems()[position] as EmptySampleModel
            (vh as EmptyMyViewHolder).titleEmpty.text = model.getText()
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM