android - 如何将警报对话框或弹出窗口中的事件/值传递给 Android MVP 中的活动?
解决方案
使用Listener是最好的方法。如何?让我们看看-
我假设您正在使用自定义对话框,为此应用这些步骤以获得正确的回调-
- 在您的CustomDialog类中创建一个接口,它将返回回调事件。
- 在Presenter/ViewModel类中实现该接口。
- 现在您的Presenter/ViewModel覆盖该回调方法,然后您可以将其用于下一个任务。
- 将Presenter/ViewModel引用作为接口的实例传递给您的自定义对话框。
- 现在在对话框中调用所需的接口方法。
快速代码示例(在 kotlin 中)
自定义对话框
class CustomDialog : DialogFragment() {
var listener: Listener? = null
var messageText = ""
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
val builder = AlertDialog.Builder(this.activity)
val rootView = activity?.layoutInflater?.inflate(R.layout.dialog_custom, null)
isCancelable = false
val messageTextView: TextView? = rootView?.findViewById(R.id.messageTextView)
val okButton: Button? = rootView?.findViewById(R.id.okButton)
if (messageText.isNotBlank()) {
messageTextView?.text = messageText
}
okButton?.setOnClickListener {
listener?.customOkClicked()
dismiss()
}
builder.setView(rootView)
return builder.create()
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
dialog?.requestWindowFeature(Window.FEATURE_NO_TITLE)
dialog?.window?.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
return super.onCreateView(inflater, container, savedInstanceState)
}
interface Listener {
fun customOkClicked()
}
}
YouPresenter
class MyPresenter: CustomDialog.Listener {
.
.
// other code
override fun customOkClicked() {
// your next step
}
}
你的活动
class YourActivity: Activity() {
.
.
fun showCustomDialog() {
CustomDialog().apply {
this.listener = presenter // reference of your presenter class.
this.messageText = msg
}.show(supportFragmentManager, "custom_dialog_tag")
}
}
注意:您可以对MVVM应用相同的方法,以防万一,对您的ViewModel执行相同的操作。
希望这是您正在寻找的答案。
推荐阅读
- python - 如何修复国际象棋词典验证器中的索引错误
- javascript - 如何在带有 next.js 的数组映射函数中使用 if 语句
- ios - 如何检测和获取 UITextField 内容 (Swift)
- cookies - 附加到“Set-Cookie”属性的错误⚠️
- node.js - SyntaxError:在 mocha 和 chai http 测试中位置 0 的 JSON 中出现意外的令牌 A
- javascript - 初学者 javascript 问题:箭头函数作为可选参数
- html - Anchor 和 Img 标签找不到 PHP 文件或图像
- typescript - react-bootstrap-typeahead 扩展自定义组件,typeahead props 需要 1 个参数
- sql - 在 SQL Server 中按查询从组中选择一列
- swift - 使用 SwiftUI 切换从集合(集合、数组或字典)中添加或删除项目