【问题标题】:Display Firebase data inside a spinner在微调器中显示 Firebase 数据
【发布时间】:2020-03-20 04:44:48
【问题描述】:

我正在学习 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"

非常感谢任何帮助。

【问题讨论】:

  • 什么是物品?
  • 一个数组:private val items = arrayListOf() 谢谢!
  • private val items = arrayListOf&lt;String&gt;() items.add(newItemList.itemName)
  • 我收到一个实例化错误:类没有零参数构造函数。我用整个代码更新了我的原始帖子。谢谢!

标签: android firebase kotlin spinner


【解决方案1】:

在下面试试这个

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

【讨论】:

  • 不幸的是它没有用。这: items.filter { it.itemName } 需要一个布尔值,我正在添加一个字符串。我什至试过这个: items.filter { it.itemName == true.toString() } 它没有显示任何内容,我也没有收到任何错误。
  • @Eddie 对不起我的错误,应该使用map 而不是filter,我更新了我的答案,请试一试
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 2012-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-09-29
相关资源
最近更新 更多