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.

Mostrar una notificación emergente en un diálogo personalizado, pero no se puede leer el contexto.

Estoy intentando crear un diálogo personalizado donde mostrará un mensaje toast cuando el usuario haga clic en el botón positivo, pero obtengo un error en la línea de Toast. ¿Cuál es el problema y cómo resolverlo? Creo que tiene algo que ver con el contexto. El error simplemente dice: No se puede resolver el método ‘makeText(com.example.studentsacademicmanagementappsama.SubjectListDialog, java.lang.String, int)’

SubjectListDialog.java

public class SubjectListDialog extends AppCompatDialogFragment {
    private EditText et_subjectCode, et_subjectName, et_creditHour;
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

        LayoutInflater inflater = getActivity().getLayoutInflater();
        View view = inflater.inflate(R.layout.layout_subjectlist_dialog, null);

        builder.setView(view)
                .setTitle("Agregar Asignatura")
                .setNegativeButton("cancelar", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                })
                .setPositiveButton("confirmar", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        try {
                            SubjectListModel subjectListModel = new SubjectListModel(et_subjectCode.
                                    getText().toString(),et_subjectName.getText().toString(),
                                    Integer.parseInt(et_creditHour.getText().toString()));

                            Toast.makeText(SubjectListDialog.this, subjectListModel.toString(),
                                    Toast.LENGTH_SHORT).show();
                        }catch (Exception e){

                        }
                    }
                });
        et_subjectCode = view.findViewById(R.id.et_subjectCode);
        et_subjectName = view.findViewById(R.id.et_subjectName);
        et_creditHour = view.findViewById(R.id.et_creditHour);
        return builder.create();
    }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema es que estás pasando la clase SubjectListDialog como parámetro de contexto al método makeText() de la clase Toast, cuando en realidad necesitas pasar un objeto de contexto válido. Para resolver esto, puedes reemplazar SubjectListDialog.this por getActivity() dentro de la llamada al método Toast.makeText(), de esta manera:

    Toast.makeText(getActivity(), subjectListModel.toString(),
        Toast.LENGTH_SHORT).show();
    

    De esta forma utilizarás el contexto de la actividad asociada al fragmento de diálogo para mostrar el mensaje emergente. Alternativamente, puedes almacenar el contexto de la actividad en una variable en el método onCreateDialog() y utilizarla más adelante, de esta manera:

    public class SubjectListDialog extends AppCompatDialogFragment {
        private EditText et_subjectCode, et_subjectName, et_creditHour;
        private Context context;
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            //...
            context = getActivity();
            //...
            .setPositiveButton("confirmar", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    try {
                        SubjectListModel subjectListModel = new SubjectListModel(et_subjectCode.
                                getText().toString(),et_subjectName.getText().toString(),
                                Integer.parseInt(et_creditHour.getText().toString()));
    
                        Toast.makeText(context, subjectListModel.toString(),
                                Toast.LENGTH_SHORT).show();
                    }catch (Exception e){
    
                    }
                }
            });
            //...
        }
    }
    

    De esta forma se almacenará el contexto de la actividad en la variable context y podrás utilizarlo más adelante dentro del escuchador del botón para mostrar el mensaje emergente.

Comments are closed.