recycleview показывает неправильные данные во время фильтрации своих данных

#android #kotlin #android-recyclerview #searchview

Вопрос:

у меня есть список данных, которые инициализируют recycleview после поиска пользователя в этом списке, поэтому я инициализирую представление поиска . я отправляю результаты в адаптер recycleview, и по журналу я вижу, что результаты верны, но recycleview не показывает эти правильные отфильтрованные данные. я пробую диффузоры ,фильтруемый адаптер… и у всех у них есть эта проблема

 class CardDetailsFilterableAdapter: RecyclerView.Adapterlt;CardDetailsFilterableAdapter.CardDetailsViewHoldergt;(){  //var cardsList: ArrayListlt;BanksCardModelgt; = ArrayList() var cardsListFiltered: ArrayListlt;BanksCardModelgt; = ArrayList()  lateinit var mContext:Context  private lateinit var binding: CardItemForListBinding   var onItemClick: ((BanksCardModel) -gt; Unit)? = null   inner class CardDetailsViewHolder(binding: CardItemForListBinding) :  RecyclerView.ViewHolder(binding.root) { } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CardDetailsViewHolder {  mContext=parent.context  binding = CardItemForListBinding.inflate(LayoutInflater.from(parent.context), parent, false)  return CardDetailsViewHolder(binding) } override fun onBindViewHolder(holder: CardDetailsViewHolder, position: Int) {  bind(cardsListFiltered.sortedBy { it.id }[holder.absoluteAdapterPosition]) }  private fun bind(item: BanksCardModel) {  // i check the data in this log and it's correct  Log.d("onbindViewHolder", item.username)     binding.cardItemCardHolder.setText(item.username)  binding.bankName.setText(item.bankName)  setCardOrShebaNumberToViews(item.cardNumber, cardParts)  setCardOrShebaNumberToViews(item.shabaNumber, shebaParts)  binding.cardExpireDateMonth.setText(item.expireMonth)  binding.cardExpireDateYear.setText(item.expireYear)  binding.cardCvv2Number.setText(item.cvv2Number) }   override fun getItemCount(): Int = cardsListFiltered.size  fun addData(list: Listlt;BanksCardModelgt;) {   cardsListFiltered.clear()  cardsListFiltered.addAll(list)  notifyDataSetChanged() }   }  

и вот этот фрагмент :

 class CardDetails1 : Fragment() {  private lateinit var binding: CardsDetailsBinding  private lateinit var filterableAdapter: CardDetailsFilterableAdapter  var fullListCards: ArrayListlt;BanksCardModelgt; = ArrayList()  private val myViewModel: MyViewModel by viewModels()   override fun onCreateView(  inflater: LayoutInflater,  container: ViewGroup?,  savedInstanceState: Bundle?  ): View {  binding = CardsDetailsBinding.inflate(inflater, container, false)  return binding.root  }    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {  super.onViewCreated(view, savedInstanceState)  initRecyclerView()  observeValue()  binding.cardsListSearchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {  override fun onQueryTextSubmit(query: String?): Boolean {  return false  }  override fun onQueryTextChange(newText: String?): Boolean {  val temp = ArrayListlt;BanksCardModelgt;()  for (part in fullListCards){  if (part.username.contains(newText.toString())){  temp.add(part)  }  }  filterableAdapter.addData(temp)  return false  }   })   }   private fun observeValue() {  myViewModel.getAllCards().observe(viewLifecycleOwner, Observer {  fullListCards=it  filterableAdapter.addData(fullListCards)  })   }  private fun initRecyclerView() {  binding.cardDetailsrecyclerview.layoutManager = LinearLayoutManager(context)  filterableAdapter = CardDetailsFilterableAdapter()  binding.cardDetailsrecyclerview.adapter = filterableAdapter   }  }