Как сохранить состояние RecyclerView после поворота экрана? ⇐ Android
-
Гость
Как сохранить состояние RecyclerView после поворота экрана?
Столкнулся с такой проблемой, что при повороте экрана данные, которые я добавил в свой список, исчезают.
Я пытался решить эту проблему через onSaveInstanceState() и onRestoreInstanceState(), а точнее через методы putParcelable() и getParcelable(), но так и не понял, как это реализовать
(Прошу прощения за, возможно, глупый вопрос, я только начинаю изучать разработку под Android)
Вот код моего RecyclerView:
класс MainActivity : AppCompatActivity() { частный идентификатор переменной = 0 частный lateinit var b: ActivityMainBinding частный адаптер val = ItemAdapter() частный lateinit var item: Item переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) b = ActivityMainBinding.inflate(layoutInflater) setContentView (b.root) в этом() с(б) { addBtn.setOnClickListener { вар заголовок = edTitle.text.toString() вар img = R.drawable.img var descr = "11111111111111111111111111" item = Item(id++, img, title, descr) адаптер.addItem(пункт) } LastBtn.setOnClickListener { адаптер.setTrueCheck(пункт) } resetBtn.setOnClickListener { адаптер.resetCheck() } showBtn.setOnClickListener { адаптер.showChecked(applicationContext) } } } личное развлечение init() { б.применить { rcView.layoutManager = LinearLayoutManager(this@MainActivity) rcView.adapter = адаптер } } } class ItemAdapter : RecyclerView.Adapter() { частный var itemList: ArrayList = ArrayList() переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): ItemHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, родительский, false) вернуть ItemHolder (просмотр) } переопределить удовольствие getItemCount(): Int { вернуть элементList.size } переопределить удовольствие onBindViewHolder(держатель: ItemHolder, позиция: Int) { Holder.bind(itemList[позиция]) //holder.changeChecked(itemList[позиция], itemList) Holder.b.itemIsChck.setOnClickListener { itemList[позиция].isCheck = !itemList[позиция].isCheck OnceCheck(itemList[позиция]) } } весело addItem(предмет: Предмет) { itemList.add(пункт) уведомитьDataSetChanged() } весело setTrueCheck(item: Item) { item.isCheck = правда однаждыПроверить(элемент) } весело resetCheck() { for (я в itemList.indices) { itemList.isCheck = false } уведомитьDataSetChanged() } fun OnceCheck(item: Item) { for (я в itemList.indices) { if (itemList.id != item.id) itemList.isCheck = false } уведомитьDataSetChanged() } весело showChecked(context: Context) { вар сообщение = "" for (я в itemList.indices) { если (itemList.isCheck) { msg += "${itemList.id}" перерыв } } Toast.makeText(контекст, сообщение, Toast.LENGTH_SHORT).show() } } class ItemHolder(item: View) : RecyclerView.ViewHolder(item) { val b : ItemLayoutBinding = ItemLayoutBinding.bind(элемент) весело связывать (предмет: Предмет) = с (б) { itemImg.setImageResource(item.image) itemTitle.text = item.title itemDescr.text = item.descr itemIsChck.isChecked = item.isCheck } } класс Item( действительный идентификатор: Int, переменное изображение: Int, вар заголовок: Строка, вар описание: Строка, вар isCheck: логическое значение = ложь )
Столкнулся с такой проблемой, что при повороте экрана данные, которые я добавил в свой список, исчезают.
Я пытался решить эту проблему через onSaveInstanceState() и onRestoreInstanceState(), а точнее через методы putParcelable() и getParcelable(), но так и не понял, как это реализовать
(Прошу прощения за, возможно, глупый вопрос, я только начинаю изучать разработку под Android)
Вот код моего RecyclerView:
класс MainActivity : AppCompatActivity() { частный идентификатор переменной = 0 частный lateinit var b: ActivityMainBinding частный адаптер val = ItemAdapter() частный lateinit var item: Item переопределить fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) b = ActivityMainBinding.inflate(layoutInflater) setContentView (b.root) в этом() с(б) { addBtn.setOnClickListener { вар заголовок = edTitle.text.toString() вар img = R.drawable.img var descr = "11111111111111111111111111" item = Item(id++, img, title, descr) адаптер.addItem(пункт) } LastBtn.setOnClickListener { адаптер.setTrueCheck(пункт) } resetBtn.setOnClickListener { адаптер.resetCheck() } showBtn.setOnClickListener { адаптер.showChecked(applicationContext) } } } личное развлечение init() { б.применить { rcView.layoutManager = LinearLayoutManager(this@MainActivity) rcView.adapter = адаптер } } } class ItemAdapter : RecyclerView.Adapter() { частный var itemList: ArrayList = ArrayList() переопределить удовольствие onCreateViewHolder (родитель: ViewGroup, viewType: Int): ItemHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_layout, родительский, false) вернуть ItemHolder (просмотр) } переопределить удовольствие getItemCount(): Int { вернуть элементList.size } переопределить удовольствие onBindViewHolder(держатель: ItemHolder, позиция: Int) { Holder.bind(itemList[позиция]) //holder.changeChecked(itemList[позиция], itemList) Holder.b.itemIsChck.setOnClickListener { itemList[позиция].isCheck = !itemList[позиция].isCheck OnceCheck(itemList[позиция]) } } весело addItem(предмет: Предмет) { itemList.add(пункт) уведомитьDataSetChanged() } весело setTrueCheck(item: Item) { item.isCheck = правда однаждыПроверить(элемент) } весело resetCheck() { for (я в itemList.indices) { itemList.isCheck = false } уведомитьDataSetChanged() } fun OnceCheck(item: Item) { for (я в itemList.indices) { if (itemList.id != item.id) itemList.isCheck = false } уведомитьDataSetChanged() } весело showChecked(context: Context) { вар сообщение = "" for (я в itemList.indices) { если (itemList.isCheck) { msg += "${itemList.id}" перерыв } } Toast.makeText(контекст, сообщение, Toast.LENGTH_SHORT).show() } } class ItemHolder(item: View) : RecyclerView.ViewHolder(item) { val b : ItemLayoutBinding = ItemLayoutBinding.bind(элемент) весело связывать (предмет: Предмет) = с (б) { itemImg.setImageResource(item.image) itemTitle.text = item.title itemDescr.text = item.descr itemIsChck.isChecked = item.isCheck } } класс Item( действительный идентификатор: Int, переменное изображение: Int, вар заголовок: Строка, вар описание: Строка, вар isCheck: логическое значение = ложь )