Recycler Посмотреть объект Альтернативное изменение цвета строки - PullRequest
0 голосов
/ 08 апреля 2020

У меня проблема, я хочу альтернативно выбрать цвет строки предмета утилизации. ie, если 1-й ряд белого цвета, 2-й ряд серого цвета, 3-й ряд снова белого цвета, а 4-й снова серого цвета и т. Д. Я попробовал один код, но он не работал. Пожалуйста, помогите.

Это мой код,

class ItemAdapter() : RecyclerView.Adapter<ItemAdapter.DateViewHolder>() {

    private var ItemList: MutableList<Items>? = ArrayList()
    private lateinit var ItemViewModel: ItemRowListBinding
    private lateinit var listener: OnItemClickListener

    init {
        this.ItemList = arrayListOf()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): DateViewHolder {
        ItemViewModel = DataBindingUtil.inflate(
            LayoutInflater.from(parent.context), R.layout.item_row_list,
            parent, false
        )
        return DateViewHolder(ItemViewModel)
    }

    override fun onBindViewHolder(holder: DateViewHolder, position: Int) {

        if(position % 2 == 0) {                           
           holder.itemView.setBackgroundResource(R.color.White);
        } else {
           holder.itemView.setBackgroundResource(R.color.Grey);
        }

        holder.bindItemDetail(ItemList!![position])
    }

    override fun getItemCount(): Int {
        return ItemList!!.size
    }

    fun setItemList(scanList: MutableList<Items>) {
        this.ItemList = scanList
        notifyDataSetChanged()
    }


    inner class DateViewHolder(private var itemRowBinding: ItemRowListBinding) :
        RecyclerView.ViewHolder(itemRowBinding.root) {

        fun bindItemDetail(ItemResponse: Items) {

            if (itemRowBinding.ItemDetailViewModel == null) {
                itemRowBinding.ItemDetailViewModel =
                    ItemDetailViewModel(
                        ItemResponse,
                        itemView.context
                    )
            } else {
                itemRowBinding.ItemDetailViewModel!!.setDetail(ItemResponse)
                itemRowBinding.executePendingBindings()
            }

            itemRowBinding.root.Detail.setOnClickListener {
                notifyDataSetChanged()
            }

            itemRowBinding.root.itemLookup.setOnClickListener {
                Log.v(
                    "Clicked_ADAPTER",
                    "Clicked itemLookup adapter :: position -> $adapterPosition"
                )
            }

    }
}

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 08 апреля 2020

Если вы прочитаете документацию setBackgroundDrawable , он ожидает Drawable идентификатор ресурса или 0 для очистки фона. A Color не является Drawable. Так что вы, вероятно, хотите использовать это:

holder.itemView.setBackgroundColor(ContextCompat.getColor(context,R.color.white))
1 голос
/ 08 апреля 2020

Если вы хотите установить рисование, вы можете использовать setBackgroundResource

Здесь вы пытаетесь задать цвет в setBackgroundResouce, чтобы он не давал результат

Вы можете установить цвет фона с помощью setBackgroundColor

if(position % 2 == 0) {                           
           holder.itemView.setBackgroundColor(ContextCompat.getColor(context,R.color.White));
        } else {
           holder.itemView.setBackgroundColor(ContextCompat.getColor(context,R.color.Grey));
        }
0 голосов
/ 08 апреля 2020

Попробуйте: у меня это сработало.

 if(position % 2 == 0){
        holder.itemView.setBackgroundColor(#A6A2A2);
    }else{
        holder.itemview.setBackgroundColor(#FFFFFF);
    }
...