У меня есть приложение Android в KOTLIN, где я хочу фильтровать и отображать документы из коллекции cloud_firestore. Я хочу фильтровать документы на основе того, что пользователь выбирает из выпадающего счетчика. Проблема в том, что я не могу получить доступ к значению выбора счетчика вне области действия функции onItemSelected.
Приложение работает так, как я хочу, если я жестко кодирую значение строки «сектор», поэтому я знаю, что проблема заключается в доступе к значение этой переменной (сектора) вне метода onItemSelected при каждом его изменении.
Вот мой HomeActivity.kt
class HomeActivity : AppCompatActivity() {
val db by lazy { FirebaseFirestore.getInstance() }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_home)
var sector = ""
//implement sector number spinner to get current user location
val sectors = arrayOf("1", "2", "3", "4", "5", "6", "7", "8", "9", 10)
val sectorOption = findViewById<View>(R.id.sectorOption) as Spinner
if(sectorOption != null){
val sectorAdapter = ArrayAdapter(this, android.R.layout.simple_spinner_item, sectors)
sectorOption.adapter = sectorAdapter
sectorOption.onItemSelectedListener = object : AdapterView.OnItemSelectedListener{
override fun onItemSelected(
parent: AdapterView<*>?,
view: View?,
position: Int,
id: Long
) {
if (parent != null) {
sector = parent.getItemAtPosition(position).toString()
}
}
override fun onNothingSelected(parent: AdapterView<*>?) {
}
}
}
var userList = mutableListOf<User>()
var dataAdapter: DataAdapter?= null
db.collection("users").whereEqualTo("sector", sector)
.get()
.addOnCompleteListener { task ->
if(task.isSuccessful){
userList.clear()
for(document in task.result!!){
Log.d(ContentValues.TAG, "test" + document.id + "=>" + document.data)
userList.add(User(document.get("Name").toString(), document.get("sector").toString()))
}
dataAdapter = DataAdapter(ArrayList(userList), applicationContext)
listview.setAdapter(dataAdapter)
}
}
}
}
}