Reputation: 47
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
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