我正在学习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"
非常感谢您的帮助。
答案 0 :(得分:0)
在下面尝试
val arrayAdapter = ArrayAdapter(this@MainActivity, android.R.layout.simple_spinner_item, items.map {it.itemName})