我有以下函式可以將活動作為引數,當我從 an 呼叫它時,Activity它可以完美運行。現在我想從一個片段呼叫這個函式,但我可以看到編輯器中有一個錯誤,提示“不兼容的型別:CargoFragment 和 Activity”。我試圖取代activity: Activity與context: Context。
我遇到的錯誤是“是 CargoFragment”
fun getProductList(activity: Activity) {
mFireStore.collection("abc")
.get()
.addOnSuccessListener {
.....
.....
.....
productList.add(product)
}
when (activity) {
is CargoActivity -> {
activity.success(productList)
}
is CheckoutActivity -> {
activity.success(productList)
}
is CargoFragment -> {
activity.success(productList)
}
}
}
.addOnFailureListener { e ->
Log.d("CheckTag", e.message!!)
when (activity) {
is CargoActivity -> {
activity.hideProgressDialog()
}
is CheckoutActivity -> {
activity.hideProgressDialog()
}
}
}
}
uj5u.com熱心網友回復:
千萬不要錯過activity到getProductList。據我了解,activity當您收到回應(成功或失敗)時,您正在傳遞以執行一些代碼。實作這一點的更好方法是公開回呼 lambda。
考慮這種方法:
fun getProductList(onSuccess: (List<Product>) -> Unit, onFailure:() -> Unit) {
mFireStore.collection("abc")
.get()
.addOnSuccessListener {
...
productList.add(product)
}
onSuccess(productList)
}
.addOnFailureListener { e ->
...
onFailure()
}
}
用法(在您的活動和片段中):
getProductList(
onSuccess = { list ->
success(list) // whatever you want to do on success
},
onFailure = {
hideProgressBar() // whatever you want to do on failure
}
)
uj5u.com熱心網友回復:
如果這是您的視圖模型,那么您永遠不應參考任何背景關系/活動/片段。
最好的方法是使用 liveData 來保存進度狀態并讓 UI(活動或片段)觀察到這一點。
uj5u.com熱心網友回復:
無需更改函式引數中的任何內容。從活動
getProductList(this)
呼叫它并從片段呼叫它
getProductList(getActivity())。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/357963.html
