我很难将其他视图类型添加到从sqlite数据库加载的工作回收器视图中。我希望这是列表末尾的一个按钮,因为在布局的末尾添加一个按钮很麻烦,将来我假装添加更多视图类型。
我看到了具有多个解决方案的多个示例,但我是一个初学者,由于我使用kotlin学习android studio,所以我的java不太好。
我尝试过:
扩展回收者视图持有人
-我无法继续,因为我不理解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
}
我希望最后使用其他视图类型以使其成为按钮。
答案 0 :(得分:2)
第一步必须声明适配器中的字段,如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()
}
}
}