Ich habe momentan Probleme mit DialogFragments. Ich benutze die neuesten v.4 Support-Pakete (Revision 8 glaube ich) Mein Problem ist, dass, wenn die Ausrichtung meines Telefons ändert, während der Dialog geöffnet ist, beginnt die Anwendung wierd zu handeln.DialogFragment Orientierungswechsel Crash mit getActivity()
Derzeit funktioniert meine Anwendung so: Es gibt eine FragmentActivity, es nennt ein Fragment. Dieses Fragment ruft dann eine DialogFragment (via getActivity(). GetSupportFragmentManager().
Wenn die Ausrichtung ändert, während der Dialog geöffnet ist, die getActivity() im Fragment = null. Dies verursacht ein Problem, wenn ich will beenden die Aktivität usw.
verursachen diese Sie den Dialog öffnen, ändern Sie die Orientierung und eine Taste drücken Erst wenn Sie die Taste drücken, stürzt
Mein DialogFragment ist AlertDialogFragment genannt.
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();
}
}
Diese
ist das 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();
}
}
Ich bin nicht sicher, was dies verursacht? Tut mir leid, wenn es eine dumme Frage ist. Ich habe an anderen Stellen über 'Windows Leaking' gelesen, aber ich habe noch nie erwähnt, dass diese Dinge in Logcat.
Kann mir jemand helfen :) Sein sehr geschätzt
Dank