Помогите найти индекс последнего добавленного элемента в RecyclerView после его сортировки, для того чтобы произвести ScrollToPosition

Помогите пожалуйста со ScrollToPosition. Сразу поясню скролить в начало или конец RecyclerView я знаю как. Мне нужно скролить именно к только что добавленному элементу. Добавление элемента происходит в базу данных и так же сортируется от наименьшего числа к большему в adaptere. Добавление элемента может быть как в начало, конец а так же в середину списка RecyclerView.

AdapterLimitationsChet.kt

class AdapterLimitationsChet(listMain: ArrayList<ListItemLimitationsChet>, private var listLimitationsFragmentChet: ListLimitationsFragmentChet) : RecyclerView.Adapter<AdapterLimitationsChet.MyViewHolder>() {
    private var listArray = listMain

    private val diffUtilCallback : DiffUtil.ItemCallback<ListItemLimitationsChet> = object : DiffUtil.ItemCallback<ListItemLimitationsChet>() {
        override fun areItemsTheSame(
            oldItem: ListItemLimitationsChet,
            newItem: ListItemLimitationsChet
        ): Boolean {
            return oldItem === newItem
        }

        @SuppressLint("DiffUtilEquals")
        override fun areContentsTheSame(
            oldItem: ListItemLimitationsChet,
            newItem: ListItemLimitationsChet
        ): Boolean {
            return oldItem == newItem
        }

    }

    private val asyncListDiffer = AsyncListDiffer(this, diffUtilCallback)

    inner class MyViewHolder(view: View, context: ListLimitationsFragmentChet) : RecyclerView.ViewHolder(view) {
        private val binding = ItemLimitationsChetBinding.bind(view)

        @SuppressLint("UseKtx")
        fun setData(item: ListItemLimitationsChet) = with(binding){
            kmStartItemLimitationsChet.text = item.startChet.toString()
            pkStartItemLimitationsChet.text = item.picketStartChet.toString()
            kmFinishItemLimitationsChet.text = item.finishChet.toString()
            pkFinishItemLimitationsChet.text = item.picketFinishChet.toString()
            speedItemLimitationsChet.text = item.speedChet.toString()
            limitationCheckChetItem.text = item.switchChetAdd.toString()

            if (limitationCheckChetItem.text == "1") {
                idItemLayoutLimitationsChet.setCardBackgroundColor(Color.parseColor(
                    PreferenceManager.getDefaultSharedPreferences(itemView.context)
                        .getString("color_limitation_time_key", "#FF009EDA")))
            } else {
                idItemLayoutLimitationsChet.setCardBackgroundColor(Color.parseColor(
                    PreferenceManager.getDefaultSharedPreferences(itemView.context)
                        .getString("color_limitation_key", "#FF009EDA")))
            }

            idItemLayoutLimitationsChet.setOnClickListener {
                val action = ListLimitationsFragmentChetDirections.actionListLimitationsFragmentChetToUpdateLimitationsFragmentChet(item)
                idItemLayoutLimitationsChet.findNavController().navigate(action)
            }
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val inflater = LayoutInflater.from(parent.context)
        return MyViewHolder(inflater.inflate(R.layout.item_limitations_chet, parent, false), listLimitationsFragmentChet)
    }

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

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        holder.setData(listArray[position])
    }

    @SuppressLint("NotifyDataSetChanged")
    fun updateLimitationsChet(listItems: List<ListItemLimitationsChet>){
        listArray.clear()
        listArray.addAll(listItems)
        listArray.sortBy { it.speedChet }
        listArray.sortBy { it.picketStartChet }
        listArray.sortBy { it.startChet }
//        notifyDataSetChanged()
        asyncListDiffer.submitList(listItems)
    }

    fun removeItemLimitationsChet(pos: Int, dbManagerLimitations: MyDbManagerLimitations){
        dbManagerLimitations.deleteDbDataLimitationsChet(listArray[pos].idChet)
        listArray.removeAt(pos)
        notifyItemRangeChanged(0, listArray.size)
        notifyItemRemoved(pos)
    }
}

ListLimitationsFragmentChet.kt

class ListLimitationsFragmentChet : Fragment() {
    private lateinit var binding: FragmentListLimitationsChetBinding
    private lateinit var myDbManagerLimitations: MyDbManagerLimitations
    private val adapterLimitationsChet = AdapterLimitationsChet(ArrayList(), this)

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?,
    ): View {
        binding = FragmentListLimitationsChetBinding.inflate(inflater, container, false)

        binding.fbAddLimitationsChet.setOnClickListener {
            findNavController().navigate(R.id.action_listLimitationsFragmentChet_to_addLimitationsFragmentChet)
        }

        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        init(view)
    }

    override fun onResume() {
        super.onResume()
        myDbManagerLimitations.openDb()
        fillAdapter()
    }

    private fun init(v: View) = with(binding) {
        myDbManagerLimitations = MyDbManagerLimitations(v.context)
        rcLimitationsChet.layoutManager = LinearLayoutManager(requireContext())
        val swapHelper = getSwapMg()
        swapHelper.attachToRecyclerView(rcLimitationsChet)
        rcLimitationsChet.adapter = adapterLimitationsChet
    }

    private fun fillAdapter() {
        CoroutineScope(Dispatchers.Main).launch {
            adapterLimitationsChet.updateLimitationsChet(myDbManagerLimitations.readDbDataLimitationsChet())
        }
    }

    override fun onDestroy() {
        super.onDestroy()
        myDbManagerLimitations.closeDb()
    }

    private fun getSwapMg() : ItemTouchHelper{
        return ItemTouchHelper(object : ItemTouchHelper.SimpleCallback(0, ItemTouchHelper.RIGHT or ItemTouchHelper.LEFT){
            override fun onMove(
                recyclerView: RecyclerView,
                viewHolder: RecyclerView.ViewHolder,
                target: RecyclerView.ViewHolder,
            ): Boolean {
                return false
            }

            override fun onSwiped(viewHolder: RecyclerView.ViewHolder, direction: Int) {
                adapterLimitationsChet.removeItemLimitationsChet(viewHolder.adapterPosition, myDbManagerLimitations)
            }

        })
    }

    companion object {
        @JvmStatic
        fun newInstance() = ListLimitationsFragmentChet()
    }
}

Ответы (0 шт):