Masood Mmm Ответов: 0

Kotlin recyclerview row item selection изменение цвета фона


Я умею менять цвет кожи. текст и фон строки щелкнул мой recyclerview в моем recyclerview.

Но моя проблема заключается в том,что после нажатия, например, на 2-й элемент, 10-й элемент также будет выбран.Точно так же после нажатия на мой 5-й элемент выбирается 3-й элемент.

Как мне решить эту проблему?
на самом деле мой вопрос заключается в том, как изменить цвет фона элемента recyclerview, который нажимает на него в Котлин?
Я также следовал инструкциям в эта ссылка Но это не сработало правильно!!

AllChanelAdapter.КТ
class AllChanelAdapter(private val datalist:MutableList<AllChanelModel>, var clickListener: OnItemClickListener):RecyclerView.Adapter<AllChanelHolder>() {
    private lateinit var context:Context
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AllChanelHolder {
        context = parent.context
        return AllChanelHolder(LayoutInflater.from(context).inflate(R.layout.allchanel_singleitem,parent,false))
    }
    override fun getItemCount(): Int = datalist.size

    override fun onBindViewHolder(holder: AllChanelHolder, position: Int) {
        val data = datalist[position]
        val txt_title = holder.itemView.txt_title
        val txt_body = holder.itemView.txt_body
        val img_chanel = holder.itemView.img_chanel

        txt_title.setText(data.title)
        txt_body.setText(data.body)

        Glide
            .with(context)
            .load("...")
            .centerCrop()
            .into(img_chanel);
    }
    holder.initialize(datalist.get(position),clickListener)
}
interface OnItemClickListener {
    fun onItemClick(item: AllChanelModel, position: Int, view: View)
}


AllChanelHolder.КТ

class AllChanelHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {

    fun initialize(item:AllChanelModel,action:OnItemClickListener){
        itemView.setOnClickListener {
            action.onItemClick(item,adapterPosition,itemView)
        }
    }
}


MainPageActivity.КТ
class MainPageActivity : AppCompatActivity(),OnItemClickListener {

    private val datalist:MutableList<AllChanelModel> = mutableListOf()
    lateinit var allchaneladapter : AllChanelAdapter
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main_page)
        
        send_request()

        allchaneladapter = AllChanelAdapter(datalist,this)
        all_chanel_recycler.layoutManager = LinearLayoutManager(this)
        all_chanel_recycler.adapter = allchaneladapter
    }

    private fun send_request(){
        val url = "http://10.0.2.2:8000/getsamplejson" // localhost api
        val que = Volley.newRequestQueue(this@MainPageActivity)
        val req = JsonArrayRequest(Request.Method.GET,url,null,
            Response.Listener {
                response->
                for(i in 0..response.length()-1){
                    var chanel_obj = response.getJSONObject(i)
                    datalist.add(
                        AllChanelModel(
                            chanel_obj.getString("body"),
                            chanel_obj.getString("title"),
                            chanel_obj.getString("userId")
                        )
                    )
                }
                allchaneladapter.notifyDataSetChanged()
            }, Response.ErrorListener {
                error->
                   Log.e("",error.message)
            })

            que.add(req)
    }
    override fun onItemClick(item: AllChanelModel, position: Int, view: View) {
        view.setBackgroundColor(Color.YELLOW)
    }
}


AllChanelModel.kt
data class AllChanelModel(
    @SerializedName("body")
    val body: String,
    @SerializedName("title")
    val title: String,
    @SerializedName("userId")
    val userId: String
    )


activity_main_page.xml
<?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="match_parent"

    android:layout_height="match_parent"

    tools:context=".MainPageActivity">

    <androidx.recyclerview.widget.RecyclerView

        android:id="@+id/all_chanel_recycler"

        android:layout_width="match_parent"

        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>


allchanel_singleitem.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal">

    <LinearLayout

        android:id="@+id/linear_content"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:layout_weight="3"

        android:orientation="vertical"

        android:padding="5dp">

        <TextView

            android:id="@+id/txt_title"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:gravity="right"

            android:text="TextView"

            android:textColor="#000000" />

        <TextView

            android:id="@+id/txt_body"

            android:layout_width="match_parent"

            android:layout_height="wrap_content"

            android:gravity="center|right"

            android:text="TextView"

            android:textColor="#000000" />

    </LinearLayout>

    <ImageView

        android:id="@+id/img_chanel"

        android:layout_width="80dp"

        android:layout_height="80dp"

        android:layout_weight="1"

        app:srcCompat="@mipmap/ic_launcher" />

</LinearLayout>


пожалуйста, помогите мне
спасибо

Что я уже пробовал:

Я уже объяснял в проблемном разделе

0 Ответов