J'ai passé toute la journée à essayer de faire ça, mais je ne peux pas ..comportement bizarre de DialogFragment
C'est le problème: Je veux un oui/non AlertDialog
qui ne disparaît pas sur le changement d'orientation, donc j'ai décidé d'utiliser DialogFragment
.
Je prépare le code et pour la première utilisation, tout avec il est tout simplement parfait, mais si je frappe le bouton (qui devrait afficher la boîte de dialogue) une fois de plus (deuxième, troisième et d'autres fois) le dialogue ne s'affiche pas! Bien que je puisse voir à partir de journaux, il fait effectivement des instances et je n'ai pas d'erreurs, c'est là, je ne peux pas le voir!
Si je plie l'application ou activer/désactiver l'écran (je crois qu'il est à appeler la méthode onResume()
) les boîtes de dialogue apparaît, tous (selon combien de temps je frappe le bouton), il semble comme un problème d'affichage ou un problème rafraîchissant peut-être .. Je ne sais pas, alors je suis venu ici en espérant obtenir de l'aide.
A propos de mon code:
J'ai un ListView
avec adaptateur sur mesure, et dans cet adaptateur je le code pour montrer un AlertDialog
(DialogFragment
) - dans le cadre d'un ImageButton
onClickListener
.
Le code pour DialogFragment
que j'utilise:
public static class cMyDialogFragment extends DialogFragment {
public static cMyDialogFragment newInstance(int title) {
cMyDialogFragment frag = new cMyDialogFragment();
Bundle args = new Bundle();
args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
int title = getArguments().getInt("title");
this.setCancelable(true);
setRetainInstance(true);
return new AlertDialog.Builder(getActivity())
// .setIcon(R.drawable.alert_dialog_icon)
.setTitle(title)
.setPositiveButton(R.string.yes,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((ActAudiorecords) getActivity()).doPositiveClick();
}
}
)
.setNegativeButton(R.string.no,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
((ActAudiorecords) getActivity()).doNegativeClick();
}
}
)
.create();
}
}
Le code pour appeler la boîte de dialogue de se présenter (dans l'adaptateur sur mesure ListView
):
public View getView(final int position, View convertView, ViewGroup parent) {
View vi = convertView;
if (vi == null)
vi = inflater.inflate(R.layout.recordings_row, null);
TextView tvDate = (TextView) vi.findViewById(R.id.tv_Recordings_r_date);
tvDate.setText(ainfo.get(position).getDate());
ImageButton ibtn_play = (ImageButton) vi.findViewById(R.id.ibtnPlay);
final String localPath = dPath + File.separator + ainfo.get(position).getFName();
ImageButton ibtn_remove = (ImageButton) vi.findViewById(R.id.ibtnRecordings_r_remove);
ibtn_remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
curFName = ainfo.get(position).getFName();
curID = ainfo.get(position).getID();
showDialog();
}
});
ibtn_play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
play(localPath);
}
});
return vi;
}
Les fonctions supplémentaires:
void showDialog() {
DialogFragment newFragment = cMyDialogFragment.newInstance(
R.string.do_you_want_to_remove_the_file);
newFragment.show(getFragmentManager(), "dialog");
}
public void doPositiveClick() {
// Do stuff here.
ps_db.delete(const_audiorecords_tname, "id = " + curID, null);
new File(dPath + File.separator + curFName).delete();
Toast.makeText(ActAudiorecords.this, getString(R.string.audiorecord_has_been_removed), Toast.LENGTH_LONG).show();
ActAudiorecords.this.onCreate(null); //Restarting the Activity to refresh the LV
Log.i("FragmentAlertDialog", "Positive click!");
}
public void doNegativeClick() {
// Do stuff here.
Toast.makeText(ActAudiorecords.this, getString(R.string.the_operation_has_been_cancelled), Toast.LENGTH_LONG).show();
Log.i("FragmentAlertDialog", "Negative click!");
}
- Je n'ai pas
onResume()
dans mon code. - J'ai essayé d'utiliser des codes différents pour
DialogFragment
mais cela n'a pas d'importance.
C'est un problème lié à la mise en page. vérifiez votre 'recordings_row' –
Je vois, mais pour quel problème je devrais le vérifier? –
vérifier votre principal 'Root Layout' également vérifier la hauteur et la largeur de l'attribut –