首页 > 解决方案 > 用户在 Kotlin 中的 editText 上键入时如何调用 recyclerview

问题描述

我创建了一个 editText 过滤器搜索。我希望 recyclerView 在用户输入时显示。在我的应用程序中,当用户键入过滤器时显示,但列表 recyclerView 也显示。也许这个视频可以解释我的意思filterSearch

标签: kotlinfilterandroid-edittext

解决方案


这是我的有效代码

适配器

    class SearchAdapter(val context: Context, val item:List<Item>) : RecyclerView.Adapter<SearchAdapter.ChildHolder>() {
        override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ChildHolder {
            val inflator = LayoutInflater.from(context).inflate(R.layout.search_container,parent,false)
            return ChildHolder(inflator)
        }
    
        override fun getItemCount(): Int {
           return item.size
        }
        override fun onBindViewHolder(holder: ChildHolder, position: Int) {
            val current = item[position]
            holder.item.name.setText(current.name)
        }
    
        class ChildHolder(view: View) : RecyclerView.ViewHolder(view){
            val item = view.country_container
        }
    }
    
    
    data class Item(val name:String)

主要活动

class MainActivity : AppCompatActivity() {
    var item:ArrayList<Item> = ArrayList()
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        item.add(
            Item("russia")
        )
        item.add(
            Item("india")
        )
        item.add(
            Item("usa")
        )
        item.add(
            Item("china")
        )
        item.add(
            Item("uk")
        )
        item.add(
            Item("brazil")
        )
        item.add(
            Item("pakistan")
        )
        item.add(
            Item("sri lanka")
        )
        search_view.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
            override fun onQueryTextSubmit(query: String?): Boolean {
                TODO("Not yet implemented")
            }
            override fun onQueryTextChange(newText: String?): Boolean {
                val filtered = item.filter { item ->
                  item.name.contains(newText.toString())
                }
                constructRecycleView(filtered)
                return true
            }
        })
    }

    private fun constructRecycleView(item:List<Item>){
        val adapter = SearchAdapter(this,item)
        recycle_view.adapter = adapter
        recycle_view.layoutManager = LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false)
    }
}

constructRecycleView方法总是创建新的适配器,你也可以创建方法来改变适配器项并调用notifyDatasetChanged方法, 如果没有你的应用程序给出错误,请自行实现onQueryTextSubmit

 kotlin.NotImplementedError: An operation is not implemented: Not yet implemented

输出

在此处输入图像描述

在此处输入图像描述


推荐阅读