如何创建一个将 Activity 和 Fragment 作为参数上下文的函数
How to make a function that takes both Activity and Fragment as the context for an argument
我有以下函数,可以将 activity 作为参数,当我从 Activity
调用它时,它运行良好。现在我想从一个片段中调用这个函数,但我可以看到编辑器中有一个错误 'Incompatible types: CargoFragment and Activity'。我尝试用 context: Context
.
替换 activity: Activity
我的错误在'is 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()
}
}
}
}
如果这是你的 viewModel,那么你永远不应该引用任何 context/activity/fragment。
最好的方法是让 liveData 保存进度状态并让 UI(activity 或片段)观察它。
无需更改函数参数中的任何内容。
从 activity 调用它
getProductList(this)
并从片段中调用它
getProductList(getActivity())
.
不要将 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()
}
}
用法(在您的 activity 和片段中):
getProductList(
onSuccess = { list ->
success(list) // whatever you want to do on success
},
onFailure = {
hideProgressBar() // whatever you want to do on failure
}
)
我有以下函数,可以将 activity 作为参数,当我从 Activity
调用它时,它运行良好。现在我想从一个片段中调用这个函数,但我可以看到编辑器中有一个错误 'Incompatible types: CargoFragment and Activity'。我尝试用 context: Context
.
activity: Activity
我的错误在'is 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()
}
}
}
}
如果这是你的 viewModel,那么你永远不应该引用任何 context/activity/fragment。
最好的方法是让 liveData 保存进度状态并让 UI(activity 或片段)观察它。
无需更改函数参数中的任何内容。
从 activity 调用它
getProductList(this)
并从片段中调用它
getProductList(getActivity())
.
不要将 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()
}
}
用法(在您的 activity 和片段中):
getProductList(
onSuccess = { list ->
success(list) // whatever you want to do on success
},
onFailure = {
hideProgressBar() // whatever you want to do on failure
}
)