問題:如何創建從DialogFragment到另一個片段的回調。就我而言,涉及的活動應完全不知道DialogFragment。從對話框片段回調到片段
考慮我有
public class MyFragment extends Fragment implements OnClickListener
然後,在某些時候,我可以做
DialogFragment dialogFrag = MyDialogFragment.newInstance(this);
dialogFrag.show(getFragmentManager, null);
凡MyDialogFragment看起來像
protected OnClickListener listener;
public static DialogFragment newInstance(OnClickListener listener) {
DialogFragment fragment = new DialogFragment();
fragment.listener = listener;
return fragment;
}
但不保證聽者會如果DialogFragment暫停,請繞過並在整個生命週期中恢復。碎片中的唯一保證是通過setArguments和getArguments通過Bundle傳入的。
有引用的活動,如果它應該是接收器的方式:
public Dialog onCreateDialog(Bundle bundle) {
OnClickListener listener = (OnClickListener) getActivity();
....
return new AlertDialog.Builder(getActivity())
........
.setAdapter(adapter, listener)
.create();
}
但我不希望活動偵聽事件,我需要一個片段。真的,它可以是實現OnClickListener的任何Java對象。
考慮通過DialogFragment呈現AlertDialog的片段的具體示例。它有Yes/No按鈕。我怎樣才能將這些按鈕發送回創建它的片段?
您剛纔提到「但也不能保證,如果DialogFragment暫停監聽器將圍繞並通過其L-恢復ifecycle「。我認爲碎片狀態在onDestroy()期間被破壞?你一定是對的,但我現在只是有點困惑如何使用Fragment狀態。我如何重現你提到的問題,聽衆不在身邊? – Sean
我不明白爲什麼你不能簡單地用'OnClickListener監聽=(OnClickListener)getParentFragment();'在DialogFragment,而是和你的主要片段實現的接口爲你做了最初。 – kiruwka
這裏是一個答案,一個不相關的問題,但它不告訴你這是如何在一個乾淨的方式http://stackoverflow.com/questions/28620026/implement-dialogfragment-interface-in-onclicklistener/33713825#33713825 – user2288580