创建DialogFragment实例时出现意外行为

时间:2016-08-09 08:27:06

标签: android android-dialogfragment

我有android:background="@color/color"

android.app.DialogFragment

和我的活动:

public class MyDialog extends DialogFragment {

   private Callback callback;

    public static MyDialog newInstance() {
      return new MyDialog();
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog dialog = new AlertDialog.Builder(getActivity())
            //set more things
            .setPositiveButton("Ok", new DialogInterface.OnClickListener(){
                callback.run(); //callback is null        
            }).create();
        return dialog;
    }

    public void setCallback(Callback callback) { this.callback = callback; }

}

但是当我点击" Ok"按钮,它崩溃beacuse回调是MyDialog dialog = MyDialog.newInstance(); dialog.setCallback(myCallback); dialog.show(getFragmentManager(), "dialog"); myCallback永远不会为空

我找到了一些东西。 null被调用两次,第二次onCreateDialogcallback

null

打印:

  

onCreateDialog(MyDialog {18ea188e})    - > com.house.hehe.MyActivity$3@3afbe8af

     

onCreateDialog(MyDialog {22199eaa})    - >空

怎么可能?为什么有两个不同的实例?为什么 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Log.d("test", "onCreateDialog (" + this + ") -> " + callback); //more code } 被调用两次?

2 个答案:

答案 0 :(得分:1)

我认为您应该像使用普通片段一样设置回调,在onAttach(Context context)中设置并在onDetach()中删除

答案 1 :(得分:0)

我不知道发生了什么,但我通过callback静态静态解决了问题:

private static Callback回调;

public static MyDialog newInstance(Callback callback) {
    MyDialog.callback = callback;      
    return new MyDialog();
}

这是一个丑陋的解决方案......哦,好吧......