android - 搜索视图不起作用
问题描述
我需要使用 SearchView 来过滤我的 CardViews RecyclerView,但到目前为止我还没有设法让它工作。我使用 Room 符号来获取应用程序数据库中的数据,并以此生成卡片。我需要将 SearchView 与我的对象的animal.nome属性一起使用。代码下方:
AnimalListAdapter.kt
class AnimalListAdapter(animalList: List<AnimalModel>, internal var context: Context, private val callbacks: (Int) -> Unit): RecyclerView.Adapter<AnimalListAdapter.ViewHolder>() {
private val mAnimalRepository = AnimalRepository(context)
internal var animalList: List<AnimalModel> = ArrayList()
init {
this.animalList = animalList
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(context).inflate(R.layout.content_animal_list, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val animal = animalList[position]
println(animal)
holder.nomeAnimal.text = animal.nome
holder.serieAnimal.text = animal.serie.toString()
holder.rgnAnimal.text = animal.rgn.toString()
holder.editButton.setOnClickListener{
val intent = Intent(context, CadastroAnimalActivity::class.java)
intent.putExtra("edit", true)
intent.putExtra("position", animal.idAnimal)
context.startActivity(intent)
}
holder.deleteButton.setOnClickListener{
val view = View.inflate(context, R.layout.dialog_confirm_delete_animal, null)
val builder = AlertDialog.Builder(context)
builder.setView(view)
val dialog = builder.create()
dialog.show()
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
view.confirm_delete_animal_button.setOnClickListener {
mAnimalRepository.delete(animal)
callbacks(position)
dialog.dismiss()
}
}
}
override fun getItemCount(): Int {
return animalList.size
}
inner class ViewHolder(view: View): RecyclerView.ViewHolder(view){
var nomeAnimal: TextView = view.nome_animal
var serieAnimal: TextView = view.serie_animal
var rgnAnimal: TextView = view.rgn_animal
var deleteButton: Button = view.delete_animal_button
var editButton: Button = view.edit_animal_button
}
}
动物活动.kt
class AnimalActivity : AppCompatActivity() {
//Iniciando RecyclerView
var animalAdapter: AnimalListAdapter? = null
var linearLayoutManager: LinearLayoutManager? = null
//Iniciando o SQLite
var animalList = ArrayList<AnimalModel>()
var displayAnimalList = ArrayList<AnimalModel>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_animal_list)
initView()
open_cadastro_animal.setOnClickListener {
val intent = Intent(this, CadastroAnimalActivity::class.java)
startActivity(intent)
finish()
}
}
private fun deleteAdapter(position: Int){
//Exclusão de cards
displayAnimalList.removeAt(position)
animalAdapter!!.notifyItemRemoved(position)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_item, menu)
val item = menu!!.findItem(R.id.search_action)
if (item != null){
val searchView = item?.actionView as SearchView
val editText = searchView.findViewById<EditText>(androidx.appcompat.R.id.search_src_text)
editText.hint = "Pesquisa..."
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
return true
}
override fun onQueryTextChange(newText: String?): Boolean {
if (newText!!.isNotEmpty()){
displayAnimalList.clear()
val searchText = newText!!.lowercase(Locale.getDefault())
animalList.forEach {
if (it.nome.lowercase(Locale.getDefault()).contains(searchText)){
displayAnimalList.add(it)
}
}
recyclerview_animal.adapter!!.notifyDataSetChanged()
} else {
displayAnimalList.clear()
displayAnimalList.addAll(animalList)
recyclerview_animal.adapter!!.notifyDataSetChanged()
}
return true
}
})
}
return super.onCreateOptionsMenu(menu)
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return super.onOptionsItemSelected(item)
}
private fun initView() {
val mAnimalRepository = AnimalRepository(this)
val mCategoriaRepository = CategoriaRepository(this)
val mPelagemRepository = PelagemRepository(this)
val mRacaRepository = RacaRepository(this)
val mUfRepository = UfRepository(this)
mCategoriaRepository.inicializa()
mPelagemRepository.inicializa()
mRacaRepository.inicializa()
mUfRepository.inicializa()
animalList = ArrayList(mAnimalRepository.getAll())
displayAnimalList.addAll(animalList)
animalAdapter = AnimalListAdapter(displayAnimalList, this, this::deleteAdapter)
linearLayoutManager = LinearLayoutManager(this)
//Inicialização da lista de Cards de fazendas cadastradas
recyclerview_animal.layoutManager = linearLayoutManager
recyclerview_animal.adapter = animalAdapter
}
}
菜单项.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/search_action"
android:title="Pesquisar"
android:icon="@drawable/ic_outline_search_24"
app:showAsAction="always|collapseActionView"
app:actionViewClass="androidx.appcompat.widget.SearchView" />
</menu>
解决方案
推荐阅读
- python - Keras 调谐器错误:logits 和标签必须具有相同的第一维
- moodle - 在 Moodle 中随机分配学生
- automation - Microsoft 3D Viewer 可以自动化吗?
- docker - 前端似乎调用后端的错误端口
- excel - Excel 的过滤器、SQL 的 Jet 报告和隐式相交
- c++ - 当该文件存在且 LD_LIBRARY_PATH 正常时,什么会导致条件性 `ldd: library.so => not found`?
- javascript - 在 django 中进行更改后,JavaScript 不会加载和 console.log()
- javascript - 我在控制台中不断收到此错误,我访问此路线的所有内容
- spring - Spring Boot:刷新由外部系统调用更新的服务事务中的实体
- kotlin - 使用 Gradle Kotlin DSL 安装依赖项不起作用