J'avais créé un AlertDialog qui fonctionne bien. Il est en train de disparaître si je presse:
1) touche d'échappement du clavier ou
2) bouton de retour utilisant la souris
Pour rester concentré même sur les conditions énoncées ci-dessus, j'avais ajouté la déclaration '.setCancelable (false)' lors de la construction. Mais je vois toujours le dialogue disparaître. Où est le problème? S'il vous plaît aider.
Code ajouté:
return new AlertDialog.Builder(getActivity())
.setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setCancelable(false)
.setPositiveButton(R.string.alert_dialog_ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.alert_dialog_cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((FragmentAlertDialog)getActivity()).doNegativeClick();
}
}
)
.create();
Env: Android 4.0 sur XP Professional.
Est-ce que ceci votre code complet? alors s'il vous plaît changez votre code pour configurer setCancelable(false)
comme ceci
void showDialog() {
DialogFragment newFragment = MyAlertDialogFragment.newInstance(
R.string..alert_dialog_two_buttons_title);
newFragment.setCancelable(false);
newFragment.show(getFragmentManager(), "dialog");
}
Votre boîte de dialogue est définie sur non annulable, mais votre fragment d'hôte est toujours annulable. Définissez votre fragment avec setCancelable(false)
.
Un autre exemple de travail:
Étape 1
Créer une classe:
public class DialogActivity extends Android.app.DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage(R.string.myMessage);
setCancelable(false);
return builder.create();
}
}
Étape 2
Ajouter une méthode à votre Activity
:
private boolean showDialog() {
FragmentManager manager = getFragmentManager();
DialogActivity dialogActivity;
dialogActivity = new DialogActivity();
dialogActivity.show(manager, "DialogActivity");
return true;
}
Étape 3
Appelez showDialog()
lorsque vous devez afficher la boîte de dialogue
dialog.setCanceledOnTouchOutside(false);
setCanceledOnTouchOutside(boolean)
Définit si cette boîte de dialogue est annulée lorsqu'elle est touchée en dehors des limites de la fenêtre. Si la valeur est true, la boîte de dialogue est annulable si elle n’a pas déjà été définie.
Le moyen le plus simple d'implémenter "setCancelable" consiste à l'implémenter lors de l'appel du dialogue dans l'activité; De cette façon, pas directement dans la classe de dialogue.
Dialog myDialog = new Dialog();
myDialog.setCancelable( false );
myDialog.show( getSupportFragmentManager(),"dialog" );
return true;
En Kotlin pour avoir rendu le dialogue non-licenciable
dialog.isCancelable =false