【发布时间】: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<String>() items.add(newItemList.itemName) -
我收到一个实例化错误:类没有零参数构造函数。我用整个代码更新了我的原始帖子。谢谢!
标签: android firebase kotlin spinner