Jakicc
Jakicc

Reputation: 47

Save RecyclerView item change

How am I to go about saving a RecyclerView item changed values.

I have an ImageButton in my ViewHolder that is used to increase a property called number which is in my list item object.

The increment works as correctly, but as soon as I enter a different fragment, and go back, the value in my RecyclerView list item resets.

How can I keep the changes in the number property to forbids the value rests?

data class Object(var title : String = "", var number : Int = 0)

private inner class ObjectHolder(view : View) : RecyclerView.ViewHolder(view), View.OnClickListener{

        private lateinit var object: Object

        private val numberText: TextView = itemView.findViewById(R.id.text_number)
        private val upButton: ImageButton = itemView.findViewById(R.id.up_button)

        init {
            upButton.setOnClickListener(this)
        }



        fun bind(object : Object){
            this.object= object
            numberText.text = this.object.number   
        }

        override fun onClick(v: View?) {
            if(upButton.isPressed){
                object.number= object.number + 1
                numberText.text = subject.number.toString()
            }
        }

    }

    private inner class ObjectAdapter(var subjects : List<Object>) : RecyclerView.Adapter<ObjectHolder>(){


        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ObjectHolder{
            val view = layoutInflater.inflate(R.layout.list_item_object, parent, false)
            return ObjectHolder(view)
        }

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


        override fun onBindViewHolder(holder: ObjectHolder, position: Int) {
            val object = objects[position]


            holder.bind(object)
        }

    }

Upvotes: 0

Views: 537

Answers (1)

vrgrg
vrgrg

Reputation: 616

I suppose you set the var subjects : List<Object> in your Fragment, so each time it recreates it sets the same data. I would store the list in the viewModel (with activity context) and each time the button is clicked the data in ViewModel would update.

Upvotes: 1

Related Questions