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();
}
}
davy.ai
El problema es que estás pasando la clase
SubjectListDialog
como parámetro de contexto al métodomakeText()
de la claseToast
, cuando en realidad necesitas pasar un objeto de contexto válido. Para resolver esto, puedes reemplazarSubjectListDialog.this
porgetActivity()
dentro de la llamada al métodoToast.makeText()
, de esta manera: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: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.