requestFeature () должен быть вызван перед добавлением контента, и он вызывается раньше в Android - PullRequest
0 голосов
/ 17 июня 2019

У меня есть такой диалог

val buyDialog = Dialog(activity)
buyDialog.requestWindowFeature(Window.FEATURE_NO_TITLE) //the stacktrace points here

        buyDialog.setContentView(R.layout.dialog_buy_items)
        buyDialog.setTitle("Buy Items")
        buyDialog.setCancelable(false)
        buyDialog.window!!.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)

        val buy_items_cancel = buyDialog.buy_items_cancel


        showSoftKeyboard(buy_items_root, false)
        showProgress(buy_items_progress, false)

        buy_items_cancel.setOnClickListener {
            buyDialog.cancel()
            buyDialog.dismiss()
        }

        buyDialog.show()

Впервые работает нормально. Поэтому, когда я отменяю диалоговое окно, нажимая кнопку отмены, а затем снова открываю это диалоговое окно, я получаю сообщение об ошибке

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.zepling.nepsetrainer, PID: 27676
    android.util.AndroidRuntimeException: requestFeature() must be called before adding content
        at com.android.internal.policy.PhoneWindow.requestFeature(PhoneWindow.java:343)

Я вызываю этот диалог из другого AlertDialog, как это

val builder = activity?.let { AlertDialog.Builder(it) }

            builder?.setTitle("Buy Items")
            builder?.setMessage("Do you want to buy available items?")

            builder?.setPositiveButton("YES") { dialog, _ ->

                showBuyItemsDialog()

            }

            builder?.setNegativeButton("No") { dialog, _ ->
                dialog.dismiss()
            }

            val alertDialog: AlertDialog = builder!!.create()

            alertDialog.show()

Ошибка указывает на buyDialog.requestWindowFeature(Window.FEATURE_NO_TITLE)

Что я делаю не так? Любая помощь будет оценена. Спасибо

1 Ответ

0 голосов
/ 17 июня 2019

Существует два возможных решения для двух разных случаев:

  1. В вашем коде buyDialog.requestWindowFeature(Window.FEATURE_NO_TITLE) не будет работать, если вы используете свою деятельность в качестве диалога. Расширьте Activity вместо ActionBarActivity, и это должно решить проблему.
  2. Если вы используете AppCompat, необходимо позвонить requestFeature() до super.onCreate().
...