#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 } }