为什么我的适配器在我尝试访问其过滤器时无法解析
Why is my adapter unresolved when I'm trying to access its filter
我有一个 activity,它有一个 RecyclerView 我想使用我设置的 SearchView 进行过滤。
class ExerciseCatalogueActivity : AppCompatActivity(), ExerciseClickedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_exercise_catalogue_activity)
val toolbar = toolbar_catalogue
setSupportActionBar(toolbar)
val exercisesCatalogueList : MutableList<Exercise>
val exerciseCatalogueFullList: MutableList<Exercise>
val exerciseFileString: String = resources.openRawResource(R.raw.exercises1).bufferedReader().use { it.readText() }
exercisesCatalogueList = (Gson().fromJson(exerciseFileString, Array<Exercise>::class.java)).toMutableList()
exerciseCatalogueFullList = ArrayList<Exercise>(exercisesCatalogueList)
rv_catalogue.apply {
rv_catalogue.layoutManager = LinearLayoutManager(context, LinearLayout.VERTICAL, false)
adapter = ExerciseCatalogueRecyclerViewAdapter(exercisesCatalogueList,exerciseCatalogueFullList, this@ExerciseCatalogueActivity)
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar_menu, menu)
val searchItem = menu!!.findItem(R.id.action_search_bar)
val searchView = searchItem.actionView as SearchView
searchView.imeOptions = EditorInfo.IME_ACTION_DONE
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
})
return true
}
}
但是 adapter.filter.filter(newText)
returns 未解决,我无法过滤我的 recyclerView。需要做出哪些改变?
您还没有保存对适配器的引用。
您在名为 rv_catalogue
的 RecyclerView 上使用 .apply,以便在范围内工作。
在onCreateOptionsMenu
中,没有可供参考的适配器。
要么在您的 Activity 中保存对适配器的引用,要么使用 rv_catalogue.adapter
获取对适配器的引用。
我有一个 activity,它有一个 RecyclerView 我想使用我设置的 SearchView 进行过滤。
class ExerciseCatalogueActivity : AppCompatActivity(), ExerciseClickedListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_exercise_catalogue_activity)
val toolbar = toolbar_catalogue
setSupportActionBar(toolbar)
val exercisesCatalogueList : MutableList<Exercise>
val exerciseCatalogueFullList: MutableList<Exercise>
val exerciseFileString: String = resources.openRawResource(R.raw.exercises1).bufferedReader().use { it.readText() }
exercisesCatalogueList = (Gson().fromJson(exerciseFileString, Array<Exercise>::class.java)).toMutableList()
exerciseCatalogueFullList = ArrayList<Exercise>(exercisesCatalogueList)
rv_catalogue.apply {
rv_catalogue.layoutManager = LinearLayoutManager(context, LinearLayout.VERTICAL, false)
adapter = ExerciseCatalogueRecyclerViewAdapter(exercisesCatalogueList,exerciseCatalogueFullList, this@ExerciseCatalogueActivity)
}
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.toolbar_menu, menu)
val searchItem = menu!!.findItem(R.id.action_search_bar)
val searchView = searchItem.actionView as SearchView
searchView.imeOptions = EditorInfo.IME_ACTION_DONE
searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
override fun onQueryTextSubmit(query: String): Boolean {
return false
}
override fun onQueryTextChange(newText: String): Boolean {
adapter.filter.filter(newText)
return false
}
})
return true
}
}
但是 adapter.filter.filter(newText)
returns 未解决,我无法过滤我的 recyclerView。需要做出哪些改变?
您还没有保存对适配器的引用。
您在名为 rv_catalogue
的 RecyclerView 上使用 .apply,以便在范围内工作。
在onCreateOptionsMenu
中,没有可供参考的适配器。
要么在您的 Activity 中保存对适配器的引用,要么使用 rv_catalogue.adapter
获取对适配器的引用。