Я сохраняю позицию выбранного элемента, но не могу понять как его отметить в recyclerview после перезапуска приложения
Я сохраняю позицию выбранного элемента, но не могу понять как его отметить в recyclerview после перезапуска приложения.
Мой адаптер:
class AdapterRecycler(
private val list: ArrayList<ItemsHolder>,
val textState: TextView,
val context: Context
) :
RecyclerView.Adapter<AdapterRecycler.ViewHolder>() {
companion object {
var selectedItemPos = -1
var lastItemSelectedPos = -1
var countResume = false
}
@SuppressLint("ResourceAsColor")
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
val textTask: TextView = itemView.findViewById(R.id.task)
val textCount: TextView = itemView.findViewById(R.id.count)
var linear: LinearLayout = itemView.findViewById(R.id.lin_task)
val buttonDelete: ImageView = itemView.findViewById(R.id.buttonDelete)
init {
itemView.setOnClickListener {
selectedItemPos = adapterPosition
PrefUtil.setPosition(context, selectedItemPos) // сохраняю
textState.text = list[selectedItemPos]._task
if (lastItemSelectedPos == -1)
lastItemSelectedPos = selectedItemPos
else {
notifyItemChanged(lastItemSelectedPos)
lastItemSelectedPos = selectedItemPos
}
notifyItemChanged(selectedItemPos)
}
buttonDelete.setOnClickListener {
removeAt(position)
if (list.isEmpty())
textState.text = "Time to work!"
if (position == selectedItemPos) {
selectedItemPos = -1
textState.text = "Time to work!"
}
}
}
fun bindItems(item: ItemsHolder) {
textTask.text = item._task
textCount.text = item._count
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.task_item, parent, false)
return ViewHolder(view)
}
override fun getItemCount(): Int {
return list.size
}
@SuppressLint("ResourceAsColor")
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
if (position == selectedItemPos)
holder.linear.setBackgroundColor(R.color.design_default_color_primary)
else
holder.linear.setBackgroundColor(Color.TRANSPARENT)
holder.bindItems(list[position])
}
private fun removeAt(position: Int) {
list.removeAt(position)
notifyItemRemoved(position)
// notifyItemRangeChanged(position, list.size)
}
}
Моя onResume функция:
override fun onResume() {
super.onResume()
initTimer()
AdapterRecycler.selectedItemPos = PrefUtil.getPosition(requireContext())
loadTask()
listViewTasks.layoutManager = LinearLayoutManager(requireContext())
adap = AdapterRecycler(hold, textState, requireContext())
listViewTasks.adapter = adap
}
Сохранить и получить позицию:
fun setPosition(context: Context, pos: Int){
val editor = PreferenceManager.getDefaultSharedPreferences(context).edit()
editor.putInt("position", pos)
editor.apply()
}
fun getPosition(context: Context): Int{
val preferences = PreferenceManager.getDefaultSharedPreferences(context)
return preferences.getInt("position", 0)
}