Home > Software design >  how to arrange color of cardview in recyclerview
how to arrange color of cardview in recyclerview

Time:01-27

enter image description here When I click on cardview I want the other cardview color to turn white

here design is that i show in recyclerview

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@android:color/transparent"
    android:backgroundTint="@android:color/transparent"
    android:elevation="0dp"
    android:paddingBottom="10dp">

    <androidx.cardview.widget.CardView
        android:id="@ id/mainCard"
        android:layout_width="80dp"
        android:layout_height="100dp"
        android:layout_marginLeft="1dp"
        android:layout_marginTop="1dp"
        android:layout_marginBottom="10dp"
        app:cardCornerRadius="10dp"
        app:cardElevation="15dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <ImageView
            android:id="@ id/cardImage"
            android:layout_width="90dp"
            android:layout_height="90dp"
            android:layout_gravity="center"
            android:layout_marginBottom="20dp"
            app:srcCompat="@drawable/cate1" />

        <TextView
            android:id="@ id/mainText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:layout_marginBottom="10dp"
            android:text="Telefon, Tablet\nve Aksesuarlar"
            android:textColor="#302E2E"
            android:textSize="10sp" />

    </androidx.cardview.widget.CardView>

    <androidx.cardview.widget.CardView
        android:id="@ id/colorCard"
        android:layout_width="82dp"
        android:layout_height="102dp"
        android:visibility="invisible"
        app:cardBackgroundColor="@color/orange"
        app:cardCornerRadius="10dp"
        app:cardElevation="10dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

The block with adapter codes for the recyclerview that I have listed I couldn't understand the logic in setOnclickListener and I don't know how to make an algorithm

class CategoryMainAdapter(val mContext: Context) :
    RecyclerView.Adapter<CategoryMainAdapter.ViewHolderClass>() {

    var categoryMainList: List<CategoryMain> = listOf()


    inner class ViewHolderClass(view: View) : RecyclerView.ViewHolder(view) {
        val mainCard: CardView
        val cardImage: ImageView
        val mainText: TextView
        val colorCard: CardView


        init {
            mainCard = view.findViewById(R.id.mainCard)
            cardImage = view.findViewById(R.id.cardImage)
            mainText = view.findViewById(R.id.mainText)
            colorCard = view.findViewById(R.id.colorCard)

        }

    }

    @SuppressLint("NotifyDataSetChanged")
    fun setList(list: List<CategoryMain>) {
        categoryMainList = list
        notifyDataSetChanged()
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
        val design =
            LayoutInflater.from(mContext).inflate(R.layout.main_category_design, parent, false)
        return ViewHolderClass(design)
    }

    override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
        val categoryMain = categoryMainList[position]

        holder.mainText.text = categoryMain.categoryName
        holder.cardImage.setImageResource(categoryMain.categoryPhoto)


        holder.mainCard.setOnClickListener() {

            holder.colorCard.visibility = View.VISIBLE
            holder.mainText.setTextColor(ContextCompat.getColor(mContext, R.color.orange))

        }


    }


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

CodePudding user response:

You can use a multi-select functionality in recycler view like this: How to implement multi-select in RecyclerView? or Multiple selected items RecyclerView in Activity.java

CodePudding user response:

i solved my problem now when i click on which cardview its color changes

class CategoryMainAdapter(val mContext: Context) :
RecyclerView.Adapter<CategoryMainAdapter.ViewHolderClass>() {

var categoryMainList: List<CategoryMain> = listOf()
var clikedPosition : Int = -1

inner class ViewHolderClass(view: View) : RecyclerView.ViewHolder(view) {
    val mainCard: CardView
    val cardImage: ImageView
    val mainText: TextView
    val colorCard: CardView


    init {
        mainCard = view.findViewById(R.id.mainCard)
        cardImage = view.findViewById(R.id.cardImage)
        mainText = view.findViewById(R.id.mainText)
        colorCard = view.findViewById(R.id.colorCard)

    }

}

@SuppressLint("NotifyDataSetChanged")
fun setList(list: List<CategoryMain>) {
    categoryMainList = list
    notifyDataSetChanged()
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolderClass {
    val design =
        LayoutInflater.from(mContext).inflate(R.layout.main_category_design, parent, false)
    return ViewHolderClass(design)
}

override fun onBindViewHolder(holder: ViewHolderClass, position: Int) {
    val categoryMain = categoryMainList[position]

    holder.mainText.text = categoryMain.categoryName
    holder.cardImage.setImageResource(categoryMain.categoryPhoto)

    if (categoryMain.isSelected == true){
        categoryMainList[position].isSelected = false
        holder.colorCard.visibility = View.INVISIBLE
        holder.mainText.setTextColor(ContextCompat.getColor(mContext, R.color.blacklow))
    }

    holder.mainCard.setOnClickListener() {
        if (clikedPosition != -1){
            notifyItemChanged(clikedPosition)
        }
        clikedPosition = position
        categoryMainList[position].isSelected = true
        holder.colorCard.visibility = View.VISIBLE
        holder.mainText.setTextColor(ContextCompat.getColor(mContext, R.color.orange))



    }


}


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

}

  • Related