1

我有一个主片段,它启动一个 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();
}
}
4

0 回答 0