Мне трудно добавить другой тип представления в мое рабочее представление ресайклера, загруженное из базы данных sqlite. Я хочу, чтобы это была кнопка в конце списка, так как добавление кнопки в конец макета вызывает ошибки, и в будущем я делаю вид, что добавляю больше типов представлений.
Я видел несколько примеров с несколькими решениями, но я новичок, и моя Java не очень хороша, так как я изучаю студию Android с помощью kotlin.
Я старался :
Расширение держателя вида ресайклера
-Я не мог продолжить, потому что не понял код Java.
с использованием BaseViewHolder
-У меня возникли проблемы с возвращаемым типом юнита onCreateViewHolder и с объявлением вьюхолдеров, поэтому я не смог сделать как в найденных примерах
Я думаю, что мой getItemViewType работает, когда я добавляю одну 1 строку с id =-10 после курсора в dbhandler, чтобы получить другой тип представления в конце списка.
override fun getItemViewType(position: Int) :Int {
return if (list[position].id.toInt() == -10 ){
VIEW_TYPE_FOLLOWER
}else{
VIEW_TYPE_HEADER
}
}
У меня много сомнений по поводу onCreateViewHolder, когда я пытаюсь вернуть ViewHolder и ViewHolder2, я получаю ошибки, так что это мой рабочий просмотрщик.
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
}
Я хочу, чтобы в конце был другой тип представления, чтобы сделать его кнопкой.
Для начала это java, я не понимаю, как его OnCreateViewHolder не указывает тип возвращаемого значения, другой aswer расширяет держатель представления recycler, и я добавил это к моему вопросу и т. д. и т. д.
на первом шаге нужно объявить поле в адаптере типа дунуло
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()
}
}
}
Спасибо ! Так что мне просто нужно было использовать внутренний класс! Но у меня все еще есть проблема, в ответе OnCreateViewHolder говорится, что это приведение «vh as ViewHolder» никогда не может быть успешным. Где и как я должен объявить vh?
Добро пожаловать, почему никогда не удается? ваш дочерний viewHolder должен быть экземпляром класса ViewHolder, может быть полезно найти этот класс github.com/alirezat775/carousel-view/blob/development/app/src/…. Я реализовал несколько представлений в собственной библиотеке.
Возможный дубликат stackoverflow.com/questions/26245139/…