【发布时间】:2021-05-05 04:32:02
【问题描述】:
场景
这里的实际编程绝对是菜鸟,尝试自己构建应用程序,边写代码边学习。
我有一个文件,下面有一个交易清单。这是我的data structure
Collection: Transactions
-> Document: Jan2021
-> Map: <"transactions", ArrayList(Transaction[amount: String, date: Timestamp, description: String, type: String])>
要求
我想在卡片上显示交易的描述、日期和金额(“交易”数据类的一部分)。
问题
我无法(或者可能不知道如何执行此操作)获取数据并将其显示在 AlertDialog 中,更不用说获取数据并将其映射到系统中的对象了。
正在使用的代码
自定义数据类
data class TransactionDocument (
var Document: HashMap<String, Any> = hashMapOf()
)
主要活动
val query: Query = traRef.whereEqualTo(FieldPath.documentId(), currentMonth)
val options =
FirestoreRecyclerOptions.Builder<TransactionDocument>()
.setQuery(query, TransactionDocument::class.java)
.build()
val arr_trans: fb_adpt_transaction? = fb_adpt_transaction(options)
[...]
override fun onStart() {
super.onStart()
arr_trans!!.startListening()
}
override fun onStop() {
super.onStop()
if (arr_trans != null) {
arr_trans!!.stopListening()
}
}
适配器类
class fb_adpt_transaccion constructor(transactionsList: FirestoreRecyclerOptions<TransactionDocument>):
FirestoreRecyclerAdapter<TransactionDocument, fb_adpt_transaccion.TransactionViewHolder>(transactionsList)
{
inner class TransactionsViewHolder constructor(private val view: View) : RecyclerView.ViewHolder(view) {
fun displayValues(transaction: TransactionDocument, position: Int) {
AlertDialog.Builder(this.view.context).setMessage(transaction.toString()).show()
}
}
override fun onBindViewHolder( transactionViewHolder: fb_adpt_transaccion.TransactionsViewHolder,
position: Int,modelo: TransactionDocument)
{
transactionViewHolder.mostrarValores(modelo, position)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): fb_adpt_transaction.TransactionViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.rv_transactions_view, parent, false)
return TransactionViewHolder(view)
}
}
到目前为止我测试过的内容
如果我在 MainActivity 中尝试以下代码,显示的结果是正确的,但我无法在适配器中完成这项工作:
query.get().addOnSuccessListener {
val message = it.documents[0]["transactions"].toString()
AlertDialog.Builder(this).setMessage(message).show()
}
此外,我测试了将数据类“TransactionDocument”(如上所示)更改为 Map,而不是 HashMap。我也尝试过发送 DocumentSnapshot(这不起作用,而且是错误的)。
感谢任何帮助!
【问题讨论】:
标签: android firebase kotlin android-recyclerview google-cloud-firestore