es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo crear una función en una clase separada y llamarla desde MainActivity?

Tengo una función:

fun showDialogWindow(){
    val builder = AlertDialog.Builder(this)
    val inflater = layoutInflater
    val dialogLayout = inflater.inflate(R.layout.dialog_window, null)
    val editText = dialogLayout.findViewById<edittext>(R.id.change_balance_edittext)

    with(builder) {
        setPositiveButton("Ok"){dialog, which ->
            Values.balance = editText.text.toString().toFloat()
        }
        setNegativeButton("Cancel"){dialog, which ->
        }
        setView(dialogLayout)
        show()
    }
}

Quiero crearla en una clase separada, cuando intento hacerlo, tengo algunos errores: en la línea 2 ‘this’ no está definido en este contexto, en la línea 3 Referencia no resuelta: layoutInflater y en la línea 13 Ambigüedad de resolución de sobrecarga. Dentro de la función MainActivity funciona. ¿Cómo puedo resolverlo?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema con la referencia “this” se puede resolver al pasar el contexto como parámetro a la función. Por ejemplo:

    fun showDialogWindow(context: Context){
        val builder = AlertDialog.Builder(context)
        val inflater = LayoutInflater.from(context)
        val dialogLayout = inflater.inflate(R.layout.dialog_window, null)
        val editText = dialogLayout.findViewById<edittext>(R.id.change_balance_edittext)
    
        with(builder) {
            setPositiveButton("Ok"){dialog, which ->
                Values.balance = editText.text.toString().toFloat()
            }
            setNegativeButton("Cancel"){dialog, which ->
            }
            setView(dialogLayout)
            show()
        }
    }
    

    El problema con la referencia “layoutInflater” se puede resolver utilizando “LayoutInflater.from(context)”.

    El error de ambigüedad en la resolución de sobrecarga se puede resolver especificando el tipo del parámetro “which” en los métodos setPositiveButton y setNegativeButton. Por ejemplo:

    setPositiveButton("Ok"){dialog, which: Int ->
        Values.balance = editText.text.toString().toFloat()
    }
    setNegativeButton("Cancel"){dialog, which: Int ->
    }
    

    Realizando estos cambios, deberías poder crear la función en una clase separada sin errores. Recuerda pasar el contexto como parámetro siempre que llames a la función.

Comments are closed.