Я использую адаптер для отображения списка + статическую кнопку в качестве нижнего колонтитула.
Кнопка и список - это файлы ресурсов макета, загруженные с помощью:
LayoutInflater.from(parent.context).inflate(R.layout.recycler_button, parent, false)
Теперь мне нужно программно изменить в некоторых случаях цвет фона кнопки и текста. Как я могу справиться с этим?
Здесь вы можете найти код моего адаптера:
package com.etask.etaskemployeeapp.Controller.Model
import android.support.v7.widget.RecyclerView
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import com.etask.etaskemployeeapp.R
class VacationTimeAdapter(val rowJSONList: ArrayList<JSONListRow>) : RecyclerView.Adapter<VacationTimeAdapter.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
if (viewType == R.layout.list_layout) {
val v = LayoutInflater.from(parent.context).inflate(R.layout.list_layout, parent, false)
return ViewHolder(v)
} else {
val v = LayoutInflater.from(parent.context).inflate(R.layout.recycler_button, parent, false)
return ViewHolder(v)
}
}
override fun getItemCount(): Int {
return rowJSONList.size + 1
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (position == rowJSONList.size){
}else {
val row = rowJSONList.get(position)
holder.identifierName.text = row.identifier
// Check which datatype the value for a row is
if (row.value is String) {
holder.valueName.text = row.value as String
} else if (row.value is Double) {
val value = row.value as Double
holder.valueName.text = "$value"
} else if (row.value is Int) {
val value = row.value as Int
holder.valueName.text = "$value"
}
}
}
override fun getItemViewType(position: Int): Int {
return if (position === rowJSONList.size) R.layout.recycler_button else R.layout.list_layout
}
// Clean all elements of the recycler
fun clear() {
rowJSONList.clear()
notifyDataSetChanged()
}
// Add a list of items -- change to type used
fun addAll(newList: ArrayList<JSONListRow>) {
rowJSONList.addAll(newList)
notifyDataSetChanged()
}
class ViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) {
var identifierName = itemView.findViewById<TextView>(R.id.identifierLabel)
var valueName = itemView.findViewById<TextView>(R.id.valueLabel)
}
}