Программно изменить макет Ressource в адаптере - PullRequest
0 голосов
/ 08 мая 2019

Я использую адаптер для отображения списка + статическую кнопку в качестве нижнего колонтитула.

Кнопка и список - это файлы ресурсов макета, загруженные с помощью:

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)

}
}

1 Ответ

0 голосов
/ 08 мая 2019

В каких случаях?Вы хотите, чтобы они были изменены в результате действия или при загрузке?У меня есть такая реализация для бота в Android

  • Если он загружен, вы можете создавать различные элементы в соответствии с полем, например.
  • В противном случае вы можете создать другой интерфейс для запускаизменение.
...