Использовать значение выбора счетчика для запроса Firebase - PullRequest
1 голос
/ 22 февраля 2020

У меня есть приложение 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)
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...