First some code:
binding.spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
p0?.let {
updateReport(
it.getItemAtPosition(p2) as ReportSelection,
binding.timePeriod.selectedItem as TimePeriod
)
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
and
binding.timePeriod.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(p0: AdapterView<*>?, p1: View?, p2: Int, p3: Long) {
p0?.let {
updateReport(
binding.spinner.selectedItem as ReportSelection,
it.getItemAtPosition(p2) as TimePeriod
)
}
}
override fun onNothingSelected(p0: AdapterView<*>?) {}
}
updateReport
eventually updates a RecyclerView with data from the database based on the user selection in the two spinners.
The problem is that these callbacks get both called on creation (sometime after onCreateView
), resulting in two queries for the database requesting the same data. How can I prevent that and have the query executed only once after creation?