Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

kotlin parte 2 - Aula 05 - Atividade 03 - IllegalStateException

Olá galera, ao adicionar um segunda transação o erro abaixo acontece, tentei eu mesmo resolver, mas não achei a solução, é como se o dialog de adicionar receita já existisse na segunda chamada, gerando o erro

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.gilmardeveloper.financask, PID: 17462
    java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
        at android.view.ViewGroup.addViewInner(ViewGroup.java:4915)
        at android.view.ViewGroup.addView(ViewGroup.java:4746)
        at android.view.ViewGroup.addView(ViewGroup.java:4718)
        at android.support.v7.app.AlertController.setupCustomContent(AlertController.java:646)
        at android.support.v7.app.AlertController.setupView(AlertController.java:464)
        at android.support.v7.app.AlertController.installContent(AlertController.java:227)
        at android.support.v7.app.AlertDialog.onCreate(AlertDialog.java:260)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:403)
        at android.app.Dialog.show(Dialog.java:302)
        at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:958)
        at com.gilmardeveloper.financask.ui.activity.ListaTransacoesActivity$onCreate$2.onClick(ListaTransacoesActivity.kt:90)
        at android.view.View.performClick(View.java:6256)
        at android.view.View$PerformClick.run(View.java:24701)
        at android.os.Handler.handleCallback(Handler.java:789)
        at android.os.Handler.dispatchMessage(Handler.java:98)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6541)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        setContentView(R.layout.activity_lista_transacoes)

        displayResumo()
        displayLista()

        val view = window.decorView
        val viewCriada = LayoutInflater.from(this).inflate(R.layout.form_transacao, view as ViewGroup, false)

// restante do código ...

val adapter = ArrayAdapter.createFromResource(this, R.array.categorias_de_receita, android.R.layout.simple_spinner_dropdown_item)
        viewCriada.form_transacao_categoria.adapter = adapter

        lista_transacoes_adiciona_receita.setOnClickListener {
                AlertDialog.Builder(this)
                        .setTitle(R.string.adiciona_receita)
                        .setView(viewCriada)
                        .setPositiveButton("Adicionar", DialogInterface.OnClickListener { dialogInterface, i ->

                            val valorEmTexto = viewCriada
                                    .form_transacao_valor.text.toString()
                            val dataEmTexto = viewCriada
                                    .form_transacao_data.text.toString()
                            val categoriaEmTexto = viewCriada
                                    .form_transacao_categoria.selectedItem.toString()

                            val valor = BigDecimal(valorEmTexto)

                            val formatoBrasileiro = SimpleDateFormat("dd/MM/yyyy")
                            val dataConvertida: Date = formatoBrasileiro.parse(dataEmTexto)
                            val data = Calendar.getInstance()
                            data.time = dataConvertida

                            val transacaoCriada = Transacao(tipo = Tipo.RECEITAS,
                                    valor = valor,
                                    data = data,
                                    categoria = categoriaEmTexto)

                            transacoes.add(transacaoCriada)
                            displayLista()
                            displayResumo()
                            lista_transacoes_adiciona_menu.close(true)
                        })
                        .setNegativeButton("Cancelar", null)
                        .show()
        }
    }
1 resposta
solução

Descobri o que fiz de errado, deixei a referência da viewParent fora do escopo do evento, então ele estava mantendo em memoria o dialog anterior