【问题标题】:How to call a method in non activity class from activity如何从活动中调用非活动类中的方法
【发布时间】:2020-07-13 17:19:21
【问题描述】:

我有一个类,它在单击打开 CustomisationActivity 时显示带有按钮的 BottomSheetDialog

class InfoDialog(private val activity: Activity) {

    private var bottomSheetDialog: BottomSheetDialog? = null

    fun show() {
        val view = LayoutInflater.from(activity).inflate(R.layout.info_dialog, null)

        view.find<Button>(R.id.accept).setOnClickListener {
            dismissDialog()
        }

        view.find<Button>(R.id.customize).setOnClickListener {
            activity.startModal<CustomisationActivity>()
        }

        bottomSheetDialog = BottomSheetDialog(activity).apply {
            setContentView(view)
            setCancelable(false)
            show()
        }
    }

    private fun dismissDialog() {
        bottomSheetDialog?.dismiss()
        bottomSheetDialog = null
    }

    fun closeDialog() {
        dismissDialog()
    }
}

当用户单击布局 Activity 中的按钮时,我需要从 CustomisationActivity 调用方法 closeDialog()(在 BottomSheetDialog 中)。

可以帮我做吗?

非常感谢

博马奇

【问题讨论】:

  • 您可以使用 DialogFragment 扩展 InfoDialog 并使用片段实例处理来自活动的事件。
  • 非常感谢您的帮助。问题是leadDev 和应用程序的规则不允许我这样做。似乎可以使用回调,但我不知道该怎么做。
  • BottomSheetDialog 如何显示?你可以使用LocalBroadcastReceiver
  • 非常感谢您的快速回复。可以从任何活动调用此对话框。如果用户单击自定义按钮,则打开自定义活动。如果点击验证按钮,我需要关闭对话框,如果点击后按,对话框必须打开。
  • 试试 LocalBroadcastReceiver

标签: class android-activity methods call


【解决方案1】:

您应该能够使用startActivityForResult() 启动CustomisationActivity。当CustomisationActivity 完成时,onActivityResult() 将在原始Activity 中调用(即启动Dialog)。然后,您应该可以从那里拨打Dialog 上的dismiss()

【讨论】:

  • 第一类不是Activity。无法使用 onActivityResult。但感谢您的提议
  • 什么是头等舱?需要有一些东西来托管对话框
  • 其实第一类可以是任意Activity。因为这个 Dialog 在应用程序使用的模块中。
  • 您的应用程序架构可能已损坏。在任何情况下,您都可以创建一个BaseActivity,其中包含显示Dialog 的代码和一个将关闭它的onActivityResult() 的实现。然后,您的所有其他活动都可以扩展 BaseActivity。有一些简单的方法可以做到这一点。
  • 感谢您的回复和帮助。实际上,我认为最好的办法就是这样做。我会尝试提出这个解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多