How to change background color of single item Recyclerview (Kotlin)

47 Views Asked by At

My Category data class:

data class Category(val category: String)

This is my category Adapter:

package com.example.store

import android.graphics.Color
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import androidx.recyclerview.widget.RecyclerView
import com.example.store.model.Category
import com.example.store.model.CategoryObjects
import com.example.store.model.CategoryObjects.isClickedItem
import com.example.store.model.CategoryObjects.size

class CategoryAdapter(val categories:MutableList<Category>):RecyclerView.Adapter<CategoryAdapter.ViewHolder>() {


class ViewHolder(view: View) : RecyclerView.ViewHolder(view){
    val categoryButton: Button = view.findViewById(R.id.login_btn)
}




override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    val view = LayoutInflater.from(parent.context)
        .inflate(R.layout.item_category, parent, false)
    return ViewHolder(view)
}

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


override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val category = categories[position]
    holder.categoryButton.text = category.category
    holder.categoryButton.setOnClickListener {
        holder.categoryButton.setBackgroundColor(Color.GREEN)
    }

   }
}

PrimaryActivity:

package com.example.store

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.store.model.Category
import com.example.store.model.CategoryObjects
import com.example.store.remote.RetrofitHelper
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class PrimaryActivity : AppCompatActivity() {
    lateinit var categoryRecyclerView : RecyclerView
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_primary)
        val categories = mutableListOf<Category>()
        GlobalScope.launch {
            try {
                val response = RetrofitHelper.storeApi.getCategories()
                response.add(0,"all")
                CategoryObjects.size = response.size
                for(i in 0 until response.size){
                    categories.add(Category(category = response[i]))
                }
                withContext(Dispatchers.Main){
                    categoryRecyclerView = findViewById(R.id.category_recyclerview)
                    categoryRecyclerView.layoutManager = LinearLayoutManager(this@PrimaryActivity,RecyclerView.HORIZONTAL,false)
                    val categoryAdapter = CategoryAdapter(categories=categories)
                    categoryRecyclerView.adapter = categoryAdapter

                }

            } catch (e:Exception) {
            Log.e("RETROFIT", e.message.toString())
        }
    }




}
}

My problem is this: MY PROBLEM IMAGE

Only one item should be selected (green background)

It means for example first I select "all", after that when I select "electronics" , "all" should be deselected ("all" should have black background once again)

How can I do that? (with holder, I access only the selected item! I cannot access other items)

Your help will be appreciated

0

There are 0 best solutions below