'unable to get spinner value on android

I am trying to show the spinner value on a textview when I click on it. the current spinner array value is retrieved from firebase. when i click the dropdown, I am able to see the different selection on the spinner. however when i click on any of the selection, my textview did not show the value same goes to the spinner value.

  
    lateinit var managernames: ArrayList<String>
    editleaveview = findViewById(R.id.EditLeaveTypeTextView)
    managernames= ArrayList()

    editleavespinner = findViewById(R.id.EditSelectLeaveTypeSpinner)
    getManagername()

    val arrayAdapter =
        ArrayAdapter<String>(this, R.layout.simple_spinner_dropdown_item, managernames)

    editleavespinner.adapter = arrayAdapter
    editleavespinner.onItemSelectedListener =
    object : AdapterView.OnItemSelectedListener {

        override fun onNothingSelected(parent: AdapterView<*>?) {
            editleaveview.setTextColor(Color.BLACK)
            Log.d("nothing", "test")
        }

        override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {

            editleaveview.setTextColor(Color.BLACK)


            editleaveview.text = editleavespinner.getItemAtPosition(position).toString()
        }
    }

    fun getManagername() {

        managerdatabase = FirebaseDatabase.getInstance().getReference("Leavetype")
        managerdatabase.addValueEventListener(object : ValueEventListener {
            override fun onDataChange(snapshot: DataSnapshot) {

                for (names in snapshot.children) {
                    managernames.add(names.child("type").value.toString())
                }
            }

            override fun onCancelled(error: DatabaseError) {
                TODO("Not yet implemented")
            }
        })
    }



Solution 1:[1]

Try Adding .notifyDataSetChanged() on the adapter after getting the value.

      fun getManagername() {
                managerdatabase = FirebaseDatabase.getInstance().getReference("Leavetype")
                managerdatabase.addValueEventListener(object : ValueEventListener {
                    override fun onDataChange(snapshot: DataSnapshot) {
        
                        for (names in snapshot.children) {
                            managernames.add(names.child("type").value.toString())
                        }
                       arrayAdapter.notifyDataSetChanged()
                    }
        
                    override fun onCancelled(error: DatabaseError) {
                        TODO("Not yet implemented")
                    }
                })
            }

Solution 2:[2]

in your onItemSelected() method just change this

editleaveview.text = editleavespinner.getSelectedItem().toString()

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 K M Rejowan Ahmmed
Solution 2 Mit Patel