在微调器中显示Firebase数据

时间:2020-03-17 19:22:07

标签: android firebase kotlin spinner

我正在学习Kotlin,我有一个带有微调器和textField的Activity,可以从Firebase下载数据。我遇到的问题是,当我在微调器中显示数据时,我看到了每个孩子中的所有对象。如何只显示一个?就我而言,我只想显示itemName。这是我的代码以及数据库的结构:

    class MainActivity(val i: Int) : AppCompatActivity() {

    var labelText: TextView? = null
    var spinnerItems: Spinner? = null
    private val items = arrayListOf<Items>()
    lateinit var itemDbRef: CollectionReference

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        labelText = findViewById(R.id.textView)
        spinnerItems = findViewById(R.id.mySpinner)
        itemDbRef = FirebaseFirestore.getInstance().collection(ITEM_REF)
        getItems()
    }

    fun getItems() {
        itemDbRef.get().addOnSuccessListener { snapshot ->
            for (document in snapshot.documents) {
                val data = document.data
                val itemName = data!![ITEM_NAME] as String
                val itemCode = data[ITEM_CODE] as String

                val newItemList = Items(itemName, itemCode)

                items.add(newItemList)
                println(newItemList)

            }

            val arrayAdapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_spinner_item, items.map { it.itemName })

            //   I need to display the name only
            spinnerItems?.adapter = arrayAdapter

            spinnerItems?.onItemSelectedListener = object : OnItemSelectedListener {
                override fun onItemSelected(adapterView: AdapterView<*>, view: View, i: Int, l: Long) {
                    val name = items[i].itemName
                    labelText?.text = "$name"
                }

                override fun onNothingSelected(parent: AdapterView<*>?) {}
            }
        }
    }

    fun onCancelled(databaseError: DatabaseError) {}
}

课程

data class Items constructor(
        val itemName: String, val itemCode: String
)

Firebase数据库

collection/AutoID/itemCode: "item1"
                  itemName: "item2"

collection/AutoID/itemCode: "item3"
                  itemName: "item4"

非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在下面尝试

val arrayAdapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_spinner_item, items.map {it.itemName})