Проблема в поиске? Невозможно заставить его работать правильно. см. прикрепленный код.
Вот код MainAcitivity:
Код: Выделить всё
class MainActivity : AppCompatActivity(), EasyPermissions.PermissionCallbacks{
//Searchview
private lateinit var recyclerView: RecyclerView
private lateinit var searchView: SearchView
private var mList = ArrayList()
private lateinit var adapter: RCVAdapter
private lateinit var binding: ActivityMainBinding
var arrayList:ArrayList = arrayListOf()
var rcvAdapter:RCVAdapter = RCVAdapter(arrayList)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
//Searchview
recyclerView = findViewById(R.id.rcvContact)
searchView = findViewById(R.id.TxtSearch)
recyclerView.setHasFixedSize(true)
recyclerView.layoutManager = LinearLayoutManager(this)
//search
adapter = RCVAdapter(arrayList)
recyclerView.adapter = adapter
if (checkContactPermissions()) {
binding.apply {
rcvContact.apply {
layoutManager = LinearLayoutManager(this@MainActivity)
adapter = RCVAdapter(arrayList)
}
}
//now load all the phone contacts
getContacts()
}
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String?): Boolean {
return false
}
override fun onQueryTextChange(newText: String?): Boolean {
filterList(newText)
return true
}
})
}
//search filter
private fun filterList(query: String?) {
if (query != null) {
val filteredList = arrayList
for (i in mList) {
if (i.contname.lowercase(Locale.ROOT).contains(query)) {
filteredList.add(i)
}
}
if (filteredList.isEmpty()){
//does not seem to reach this point??
Toast.makeText(this,"No Contact found!", Toast.LENGTH_SHORT).show()
}else{
adapter.setFilteredList(arrayList)
}
}
}
private fun getContacts() {
//loads all contacts with no issues
}
Код: Выделить всё
class RCVAdapter(var contactList: ArrayList,) : RecyclerView.Adapter() {
inner class MyViewHolder(val binding: ItemContactBinding) : RecyclerView.ViewHolder(binding.root) {
val contid = binding.TxtContID
val contname = binding.TxtContName
val contno = binding.TxtContNo
val contphoto = binding.ImgContPhoto
val contemail = binding.TxtContEmail
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(
ItemContactBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
)
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val item = contactList[position]
holder.binding.TxtContID.text = item.contid.toString()
holder.binding.TxtContName.text = item.contname
holder.binding.TxtContNo.text = item.contnumber
if(contactList[position].contPhoto != null)
holder.binding.ImgContPhoto.setImageBitmap(contactList[position].contPhoto)
else
holder.binding.ImgContPhoto.setImageDrawable(ContextCompat.getDrawable(holder.itemView.cont
ext,R.drawable.ic_people_24))
holder.binding.TxtContEmail.text = item.contemail
}
override fun getItemCount(): Int = contactList.size
fun setFilteredList(contactList: List){
this.contactList = contactList as ArrayList
notifyDataSetChanged()
}
}
Код: Выделить всё
data class ContactModel (
var contid: String = "",
var contname: String = "",
var contnumber: String = "",
var contPhoto: Bitmap? = null,
var contemail: String = "",
)
Благодарю за помощь, чтобы увидеть, что не так с кодом!
п>
Подробнее здесь: https://stackoverflow.com/questions/793 ... iew-kotlin