SearchView不要在房间数据库上搜索

时间:2020-01-04 00:13:41

标签: android kotlin android-room searchview

所有元素均负责正常的搜索。该列表只是不想更改。也许有人知道我是如何工作的,但是我在互联网上搜索了一些信息,但是没找到

主要活动

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()
    }
}

0 个答案:

没有答案