Kotlin中如何在Fragment的onStart()方法内调用onReceiptsAdd()函数
实现方案
onReceiptsAdd()方法需要传入两个参数:dataReceipts类型的收据实体、Int类型的位置下标,你只需要在onStart()里先组装好这两个参数,再直接调用方法即可,修改后的代码示例如下:
override fun onStart() { super.onStart() val value = binding.etBlank.text?.trim().toString() val from = binding.etBlank.text?.trim().toString() val image = binding.etBlank.text?.trim().toString() val rootRef = FirebaseFirestore.getInstance() val usersRef = rootRef.collection("receipts") val auth = FirebaseAuth.getInstance() auth.currentUser?.apply { // 1. 组装dataReceipts实体,字段名根据你实际的dataReceipts定义调整即可 val receipts = dataReceipts( id = uid, from = from, value = value, image = image ) // 2. 确定position:如果是追加到列表末尾直接传adapter.itemCount,固定位置就传对应数值 val addPosition = adapter.itemCount // 3. 直接调用onReceiptsAdd方法 onReceiptsAdd(receipts, addPosition) // 原有Firestore写入逻辑保留 usersRef.document(uid).set(mapOf( "id" to uid, "from" to from, "value" to value, "image" to image, )).addOnCompleteListener { task -> if (task.isSuccessful) { Log.d("TAG", "User successfully added.") } else { Log.d("TAG", task.exception?.message ?: "未知异常") } } } }
注意事项
- 你当前代码里
value/from/image三个字段都是从同一个输入框etBlank取值,属于测试阶段的临时写法,实际使用时替换为对应输入框的取值即可 - 原有代码里
task.exception!!.message!!的强转有崩溃风险,建议替换为安全调用写法,避免空指针异常 - 如果当前用户未登录(
auth.currentUser为null),以上逻辑都不会执行,如有需要可以补充未登录的提示逻辑
内容的提问来源于stack exchange,提问作者MaksChojniak1
相关产品推荐
相关产品推荐

