首页 > 解决方案 > 显示对话后如何停止代码运行?(安卓工作室)

问题描述

在我的应用程序的最开始,我会出现一个对话框,用户可以在其中选择两个选项:

在此处输入图像描述

我运行对话的代码如下所示:

override fun onStart() {
    super.onStart()

    popup.show(supportFragmentManager, "example d")
    Log.d("TAG", "THIS SHOULD BE RUN AFTER I HAVE CLICKED ONE OF THE DIALOGUE BUTTONS")

    checkSharedPreference()
    switcher()
}

问题是代码不会停止popup.show(supportFragmentManager, "example d")。它继续运行。我认为这与对话异步有关,不是吗?我该如何解决这个问题?Completionhandler? Asynctask? 还有什么?

更新 我尝试按照@Akshay Paliwal 所说的来构建时钟:

class MainActivity : AppCompatActivity() {

    public fun onCreateDialog(savedInstanceState: Bundle?): Dialog {

    val context = applicationContext
    val sharedPreference = context.getSharedPreferences(
            "key", Context.MODE_PRIVATE)

    val builder = AlertDialog.Builder(applicationContext)

    builder.setTitle("Välkommen till Demensvård utan tvång.")
            .setMessage("Berätta vem du är.")
            .setPositiveButton("Anhörig") { dialog, which ->
                val version = "anhorig"
                sharedPreference.edit().putString("version", version).apply()
                checkSharedPreference()
                switcher()
            }
            .setNegativeButton("Personal") { dialog, which ->
                val version = "personal"
                sharedPreference.edit().putString("version", version).apply()
                checkSharedPreference()
                switcher()
            }

    return builder.create()
}

override fun onStart() {
    super.onStart()

    //THIS? doesn't work...
    onCreateDialog(WHAT BUNDLE???)

    //OR THIS?
    onCreateDialog(what bundle?).show(supportFragmentManager, "example d")
}

How do I call the `onCreateDialog` function? `onCreateDialog(WHAT BUNDLE???)` what bundle should be passed? `onCreateDialog(what bundle?).show(supportFragmentManager, "example d")` Again what bundle? 

还是我需要onCreateDialog在一个单独的类中扩展AppCompatDialogFragment?在那种情况下,我main.switcher应该从该类的回调中调用吗?

标签: android-studioandroid-asynctaskdialog

解决方案


你是对的,弹出窗口是非阻塞的。据我所知,Android 旨在防止开发人员编写同步对话框。

您可以在这里做的是向您的弹出窗口添加一个回调并在相应的侦听器方法中处理响应。将代码从 onStart() 移动到您的处理程序方法,然后它将在您的弹出窗口响应后执行。

在以下示例中,您将向其中一个弹出按钮添加侦听器并在其 onClick() 方法中执行代码:

popupButton.setOnClickListener(new OnClickListener();
 @Override
 public void onClick(View v) {
   Log.d("TAG", "THIS SHOULD BE RUN AFTER I HAVE CLICKED ONE OF THE DIALOGUE BUTTONS")
 } });

推荐阅读