我有一个主片段,它启动一个 DialogFragment 并通过“setOnOptionClickListener(interface OnOptionClickListener)”设置一个监听器(DialogFragment 中定义的接口)。
如何将其存储在 setOnOptionClickListener 的 onSaveInstance 中?
访问由 DialogFragment 内部的 MainFragment 传递的侦听器的方法会在方向更改后引发 NullPointerException。
以下代码是原始代码的精简版本。
在 MainFragment 中
private void showDialog(){
CustomDialogFragment dialog = new CustomDialogFragment();
dialog.setOnOptionClickListener(new OnOptionClickListener(){
//Overwrite some methods
});
dialog.show(getChildFragmentManager(), "optionsdialog");
}
在 CustomDialogFragment 中
public class CustomDialogFragment extends DialogFragment {
public interface OnOptionClickListener{
ArrayList<String> getData();
void onDone();
}
private ArrayList<String> data = new ArrayList<String>();
public void setOnOptionClickListener(OnOptionClickListener mListener){
this.mListener = mListener;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
... do some stuff ...
//Accessing the Listener!
data = mListener.getData();
/* I could save the ArrayList in onSaceInstanceState Bundle Argument
But how do I save the call to the listener with the method that MainFragment
overwrote and passed as argument (setOnOptionClickListener()...) ?? */
mListener.onDone();
}
}