我在活动中有一个listfragment,在按一行以获取其他选项时将打开一个dialogfragment,现在我旋转设备并从dialogfragment中选择一个选项,它抛出IllegalStateException...。未附加片段。
choiceDialog
.setOnClickListDialogClickListener(new StandardListDialogFragment.OnClickListener<String>() {
@Override
public void onClick(DialogInterface dialog, int which,
String value) {
Intent intent = new Intent(this.getActivity(),
DutyEditor.class);
startActivityForResult(intent, 0);
dialog.dismiss();
}
});
发生这种情况的原因是,每当方向发生更改时,就会损坏Fragment并使用FragmentManager重新创建。
使用片段时,您应该遵守这些规则
最好的选择是在DialogFragment本身中调用startActivityForResult()。
但是,每当您确实需要将DialogFragment单击事件传递给Activity时,请使用一个Interface。例如。
public final class SomeDialogFragment extends DialogFragment {
/**
* Callbacks of {@link SomeDialogFragment}
*/
public interface SomeDialogFragmentCallbacks {
/**
* Called when user pressed some button
*/
void onSomeButtonClick();
}
@Override
public void onAttach(final Activity activity) {
super.onAttach(activity);
// Make sure the Activity can receive callbacks
if (!(activity instanceof SomeDialogFragmentCallbacks)) {
throw new RuntimeException("Should be attached only to SomeDialogFragmentCallbacks");
}
}
// now whenever a button is clicked
@Override
public void onClick(DialogInterface dialog, int which) {
final SomeDialogFragmentCallbacks callbacks = (SomeDialogFragmentCallbacks) getActivity();
if (callbacks != null) {
callbacks.onSomeButtonClick();
}
}
}
并且所有使用此DialogFragment的Activity都应实现回调方法。
public final class SomeActivity extends Activity implements SomeDialogFragmentCallbacks {
@Override
public void onSomeButtonClick() {
// Handle some DialogFragment button click here
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句