【问题标题】:AlertDialog in Android Studio Kotlin not displayingAndroid Studio Kotlin 中的 AlertDialog 未显示
【发布时间】:2022-01-18 14:38:50
【问题描述】:

我知道我提出这个问题听起来很愚蠢,但我根本无法在使用 android studio 和 kotlin 开发的应用程序中显示 AlertDialog 框。这是代码:

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    runBlocking {
        showDefaultDialog(this)

    }
    FuelManager.instance.basePath = getString(R.string.BaseURL)

还有功能:

private fun showDefaultDialog(context: Context) {
    val alertDialog = AlertDialog.Builder(context)

    alertDialog.apply {
        //setIcon(R.drawable.ic_hello)
        setTitle("Hello")
        setMessage("I just wanted to greet you. I hope you are doing great!")
        setPositiveButton("Positive") { _: DialogInterface?, _: Int ->
            Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show()
        }
        setNegativeButton("Negative") { _, _ ->
            Toast.makeText(context, "Negative", Toast.LENGTH_SHORT).show()
        }
        setNeutralButton("Neutral") { _, _ ->
            Toast.makeText(context, "Neutral", Toast.LENGTH_SHORT).show()
        }
    }.create().show()
}

我错过了什么/做错了什么?我尝试过使用没有该功能的代码,但也没有用。

(当我在调试模式下运行应用程序并在函数中设置断点时,断点被命中,但警报对话框不显示!)

请帮忙。

编辑:

我试过这个(在一个测试应用中):

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    showDefaultDialog(this)
    Toast.makeText(this, "Hello!!!", Toast.LENGTH_SHORT).show()
}

显示对话框,但也显示 Toast.makeText,而无需等待 alertDialog 上的操作。

如何使 alertDialog 阻塞? (这是我之前代码的问题吗?)

【问题讨论】:

    标签: android-studio kotlin android-alertdialog


    【解决方案1】:

    您绝不能阻塞主线程,因此即使这确实有效,它也会使您的应用程序冻结并崩溃,并出现可怕的应用程序无响应对话框。删除 onCreate() 中的 Toast 呼叫。如果你想在对话框关闭后做一些事情,你必须把它放在你添加到对话框构建器的监听器中,例如setOnDismissListener

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            showDefaultDialog(this)
        }
    }
    
    private fun showDefaultDialog(context: Context) {
        val alertDialog = AlertDialog.Builder(context)
    
        alertDialog.apply {
            //setIcon(R.drawable.ic_hello)
            setTitle("Hello")
            setMessage("I just wanted to greet you. I hope you are doing great!")
            setPositiveButton("Positive") { _: DialogInterface?, _: Int ->
                Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show()
            }
            setNegativeButton("Negative") { _, _ ->
                Toast.makeText(context, "Negative", Toast.LENGTH_SHORT).show()
            }
            setNeutralButton("Neutral") { _, _ ->
                Toast.makeText(context, "Neutral", Toast.LENGTH_SHORT).show()
            }
            setOnDismissListener {
                Toast.makeText(context, "Hello!!!", Toast.LENGTH_SHORT).show()
            }
    
        }.create().show()
    }
    

    如果您需要处理 Activity 私有的事情,那么您可以让这个函数进行回调:

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            showDefaultDialog(this) {
                // put stuff that happens after dialog closed in this lambda
                Toast.makeText(this@MainActivity, "Hello!!!", Toast.LENGTH_SHORT).show()
            }
        }
    }
    
    inline fun showDefaultDialog(context: Context, crossinline onDismiss: ()->Unit) {
        val alertDialog = AlertDialog.Builder(context)
    
        alertDialog.apply {
            //setIcon(R.drawable.ic_hello)
            setTitle("Hello")
            setMessage("I just wanted to greet you. I hope you are doing great!")
            setPositiveButton("Positive") { _: DialogInterface?, _: Int ->
                Toast.makeText(context, "Hello", Toast.LENGTH_SHORT).show()
            }
            setNegativeButton("Negative") { _, _ ->
                Toast.makeText(context, "Negative", Toast.LENGTH_SHORT).show()
            }
            setNeutralButton("Neutral") { _, _ ->
                Toast.makeText(context, "Neutral", Toast.LENGTH_SHORT).show()
            }
            setOnDismissListener {
                onDismiss()
            }
    
        }.create().show()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2012-12-15
      • 2018-01-31
      • 1970-01-01
      • 2020-07-03
      相关资源
      最近更新 更多