DialogFragment - Fragment - CallBack
Bonjour à tous,
Voilà je suis dans la constitution d'une Library perso et je rencontre quelque difficulté...
Alors j'ai une class DialogFragmentYesNo qui extends de DialogFragment et qui contient des interfaces pour faire des retour informations ( CallBack ).
Jusque là tout va bien mon DialogFragmentYesNo si je l'utilise dans une ActionBarActivity ça passe.
Par contre si je l'utilise dans un Fragment là non...
Je suis dans un projet qui a un viewPager et qui contient différent Fragment donc il faut absolument que je trouve une solution ^^
Code:
1 2 3 4 5
|
L'erreur rencontré :
FATAL EXCEPTION: main
java.lang.ClassCastException: fr.ax.volumeboster.viewPager.volumeBoosterActivity@4208e4d0 must implement OnCallBack |
J'ai cette erreur lorsque je fait dans mon DialogFragment :
Code:
1 2 3 4 5 6 7 8 9 10
|
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (CallbacksDialogFragmentYesNo) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement CallbacksDialogFragmentYesNo");
}
} |
Extrait de mon code du DialogFragment :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
public class DialogFragmentYesNo extends DialogFragment {
/**
* Callback interface through which the fragment will report the
* task's progress and results back to the Activity.
*/
public static interface CallbacksDialogFragmentYesNo {
public void onClickPositiveButton();
public void onClickNegativeButton();
}
private CallbacksDialogFragmentYesNo mCallbacks = null;
Activity mContext;
String mTitle;
String mMessage;
String mPositiveButton;
String mNegativeButton;
public DialogFragmentYesNo(Activity mContext) {
this.mContext = mContext;
}
/**
* Constructeur
* @param mTitle
* @param mMessage
* @param mPositiveButton
* @param mNegativeButton
*/
public DialogFragmentYesNo(Activity mContext,String mTitle, String mMessage, String mPositiveButton, String mNegativeButton) {
this.mContext = mContext;
this.mTitle = mTitle;
this.mMessage = mMessage;
this.mPositiveButton = mPositiveButton;
this.mNegativeButton = mNegativeButton;
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
mCallbacks = (CallbacksDialogFragmentYesNo) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement CallbacksDialogFragmentYesNo");
}
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setTitle(mTitle);
alertDialogBuilder.setMessage(mMessage);
alertDialogBuilder.setPositiveButton(mPositiveButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mCallbacks = (CallbacksDialogFragmentYesNo) getActivity();
mCallbacks.onClickPositiveButton();
dialog.dismiss();
}
});
alertDialogBuilder.setNegativeButton(mNegativeButton, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
mCallbacks = (CallbacksDialogFragmentYesNo) getActivity();
mCallbacks.onClickNegativeButton();
dialog.dismiss();
}
});
return alertDialogBuilder.create();
}
} |
Ça fonctionne parfaitement lorsque j'appel mon DialogFragment dans une ActionBarActivity mais dans un Fragment pas moyen...
Extrait du code pour l'appel de mon DialogFragment :
Code:
1 2 3 4 5 6
|
DialogFragment newInstance = new DialogFragmentYesNo(mActivity);
newInstance.show(fm,"DialogFragmentYesNo");
// fm c'est mon FragmentSupportManger() |
J'ai essayé de passé mon Activity ou y'a mon pager à mon Fragment puis à mon DialogFragment mais pas moyen...
mCallBack est soit null ou soit arrive pas à le Caster !
L'interface est bien entendu implementer.
Je développe sous Android Studio 0.3.4 - Gradle 1.8 - Mac OS
Si vous auriez une astuce je suis preneur ^^
Cordialement,