У меня в настоящее время возникают проблемы с DialogFragments. Я использую последние пакеты поддержки v.4 (версия 8, я считаю) Моя проблема заключается в том, что если ориентация моего телефона меняется, когда диалог открыт, приложение начинает действовать странно.Диалог -фрагмент Ориентация Изменение Сбой с getActivity()
В настоящее время моя заявка работает следующим образом: Существует фрагментация, она вызывает фрагмент. Этот фрагмент затем вызывает DialogFragment (через getActivity(). GetSupportFragmentManager().
При изменении ориентации в то время как диалог открыт, getActivity() в Fragment = NULL. Это вызывает проблему, если я хочу закончить активность и т.д.
Чтобы вызвать этого откройте диалоговое окно, изменить ориентацию и нажмите кнопку только после того, как вы нажмете на кнопку он выходит из строя
Мой DialogFragment называется 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();
}
}
Это фрагмент:
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();
}
}
Я не слишком уверен, Что причиной этого? Извините, если это глупый вопрос. Я читал в других местах о «Windows Leaking», но я не видел упоминания об этом в logcat.
Может кто-нибудь мне помочь :) Его очень ценили
Благодаря