所有元素均负责正常的搜索。该列表只是不想更改。也许有人知道我是如何工作的,但是我在互联网上搜索了一些信息,但是没找到
主要活动
class MainActivity : AppCompatActivity() {
var searchView:SearchView?=null
lateinit var adapter: ProductListAdapter
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val inflater = menuInflater
inflater.inflate(R.menu.menu_item_list, menu)
adapter = ProductListAdapter(applicationContext)
val searchManager = getSystemService(Context.SEARCH_SERVICE)as SearchManager
searchView = menu!!.findItem(R.id.action_search).actionView as SearchView
searchView!!.setSearchableInfo(searchManager.getSearchableInfo(componentName))
searchView!!.maxWidth = Int.MAX_VALUE
searchView!!.setOnQueryTextListener(object:SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
adapter.filter.filter(query)
Toast.makeText(this@MainActivity,"Work onQueryTextSubmit",Toast.LENGTH_SHORT).show()
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
adapter.filter.filter(newText)
Toast.makeText(this@MainActivity,"onQueryTextChange",Toast.LENGTH_SHORT).show()
return true
}
})
return super.onCreateOptionsMenu(menu)
}
}
也许我在回收站视图适配器中有问题,我不明白 我认为我对filterListAdapter列表有问题,因为在我的示例中,它们是空列表?
适配器
class ProductListAdapter internal constructor(
context: Context
) : RecyclerView.Adapter<ProductListAdapter.ProductViewHolder>(), Filterable {
private val inflater: LayoutInflater = LayoutInflater.from(context)
private var productsList = emptyList<ProductEntity>()
internal var filterListResult: List<ProductEntity>
init {
this.filterListResult = productsList
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val charSearch = constraint.toString()
if (charSearch.isEmpty())
filterListResult = productsList
else {
val resultList = ArrayList<ProductEntity>()
for(row in productsList){
if (row.productName!!.toLowerCase().contains(charSearch.toLowerCase()))
resultList.add(row)
}
filterListResult = resultList
}
val filterResults = FilterResults()
filterResults.values = filterListResult
return filterResults
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
filterListResult = results!!.values as List<ProductEntity>
notifyDataSetChanged()
}
}
}
override fun getItemCount(): Int {
var sizes = filterListResult.size
return sizes
}
override fun onBindViewHolder(holder: ProductViewHolder, position: Int)
{
holder.onBind(productsList[position])
holder.onBind(filterListResult[position])
}
class ProductViewHolder(view: View) : RecyclerView.ViewHolder(view) {
private val productName = view.product_name
private val productPrice = view.product_price
private val productWeight = view.product_weight
fun onBind(productEntity: ProductEntity) {
productName.text = productEntity.productName
productPrice.text = productEntity.productPrice.toString()
productWeight.text = productEntity.productWeight.toString()
}
}
internal fun setAll(productEntity: List<ProductEntity>) {
this.productsList = productEntity
this.filterListResult = productEntity
notifyDataSetChanged()
}
}