發生這種情況是因爲Fragment被銷燬,並且每當方向更改時都使用FragmentManager重新創建。
使用片段時片段工作
- 避免制定者時,你應該堅持這些規則。
- 切勿在活動中持有對片段的字段引用。
- 在onAttach()和onDetach()之後,您可以在片段上保存一個活動的字段引用,但是我發現最好調用getActivity(),並在每次需要進行短操作時檢查null。
最好的選擇是在DialogFragment本身中調用startActivityForResult()。
但是,無論何時您確實需要將DialogFragment點擊事件傳遞給活動,請使用接口。例如。
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的活動都應實現回調方法。
public final class SomeActivity extends Activity implements SomeDialogFragmentCallbacks {
@Override
public void onSomeButtonClick() {
// Handle some DialogFragment button click here
}
}
謝謝,它的工作:) – Azmat 2014-10-10 13:35:01