J'ai actuellement quelques problèmes avec DialogFragments. J'utilise les derniers paquets de support v.4 (Révision 8 je crois) Mon problème est, que si l'orientation de mon téléphone change pendant que la boîte de dialogue est ouverte, l'application commence à agir wierd.Orientation de DialogFragment Changer de crash avec getActivity()
Actuellement, mon application fonctionne comme ceci: Il y a une FragmentActivity, elle appelle un fragment. Ce fragment appelle ensuite un DialogFragment (via getActivity(). GetSupportFragmentManager().
Si les changements d'orientation alors que le dialogue est ouvert, le getActivity() dans le Fragment = null. Cela pose un problème si je veux terminer l'activité, etc.
Pour provoquer ce que vous ouvrez la boîte de dialogue, changer l'orientation et appuyer sur un bouton seulement après avoir appuyé sur le bouton, il se bloque
Mon DialogFragment est appelé AlertDialogFragment.
public class AlertDialogFragment extends DialogFragment {
private static Builder mBuilder;
private static DialogInterface.OnClickListener mListener;
public static AlertDialogFragment newInstance(Context context, DialogInterface.OnClickListener listener) {
mBuilder = new AlertDialog.Builder(context);
mListener = listener;
return new AlertDialogFragment();
}
//... some functions to set Icons etc
public void setButton(int whichButton, CharSequence buttonText) {
final DialogInterface.OnClickListener listener = mListener == null ? null : mListener;
mBuilder.setPositiveButton(buttonText, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
listener.onClick(dialog, whichButton);
}
});
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return mBuilder.create();
}
}
C'est le fragment:
public class TestBedFragment extends Fragment implements DialogInterface.OnClickListener {
// onCreateView Stuff
private void showCrashDialog() {
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
AlertDialogFragment newDialog = AlertDialogFragment.newInstance(getActivity(), this);
newDialog.setTitle("Test");
newDialog.setIcon(android.R.drawable.ic_dialog_alert);
newDialog.setMessage("Testing testing testing... 1, 2, 3... Just press Ok.");
newDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Ok");
newDialog.show(ft, "dialog");
// Cause the problem. Simulate the user turning the screen
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@Override
public void onClick(DialogInterface dialog, int which) {
/*
* hexnumber = a hex number
* Normally equals: TestBedFragment{hexnumber #0 id=hexnumber}
* With crash equals: TestBedFragment{hexnumber}
*/
Log.e("TestBedFragment", "this = " + this);
/*
* hexnumber = a hex number
* Normally equals: [email protected]
* With crash equals: null
*/
Log.e("TestBedFragment", "getActivity() = " + getActivity()); // Will equal null... ???
getActivity().finish();
}
}
Je ne suis pas trop sûr ce qui est la cause? Désolé si c'est une question stupide. J'ai lu dans d'autres endroits à propos de 'Windows fuit', mais je n'ai pas vu de mention de ce genre de choses dans logcat.
Quelqu'un peut-il me aider :) Ses grandement appréciés
Merci