创建 DialogFragment 实例的意外行为
Unexpected behaviour creating DialogFragment instance
我有这个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; }
}
来自我的 activity:
MyDialog dialog = MyDialog.newInstance();
dialog.setCallback(myCallback);
dialog.show(getFragmentManager(), "dialog");
但是当我点击 "Ok" 按钮时,它崩溃了,因为回调是 null
。 myCallback 永远不会为空
我发现了一些东西。 onCreateDialog
被调用了两次,第二次 callback
是 null
:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d("test", "onCreateDialog (" + this + ") -> " + callback);
//more code
}
它打印:
onCreateDialog (MyDialog{18ea188e})
-> com.house.hehe.MyActivity@3afbe8af
onCreateDialog (MyDialog{22199eaa})
-> null
怎么可能?为什么会有两个不同的实例?为什么 onCreateDialog
被调用了两次?
我认为您应该像使用普通 Fragment 一样设置回调,在 onAttach(Context context)
中设置它并在 onDetach()
中删除它
我不知道发生了什么,但我已经通过执行 callback
static static:
解决了
私有静态回调回调;
public static MyDialog newInstance(Callback callback) {
MyDialog.callback = callback;
return new MyDialog();
}
这是一个丑陋的解决方案...哦好吧...
我有这个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; }
}
来自我的 activity:
MyDialog dialog = MyDialog.newInstance();
dialog.setCallback(myCallback);
dialog.show(getFragmentManager(), "dialog");
但是当我点击 "Ok" 按钮时,它崩溃了,因为回调是 null
。 myCallback 永远不会为空
我发现了一些东西。 onCreateDialog
被调用了两次,第二次 callback
是 null
:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Log.d("test", "onCreateDialog (" + this + ") -> " + callback);
//more code
}
它打印:
onCreateDialog (MyDialog{18ea188e}) -> com.house.hehe.MyActivity@3afbe8af
onCreateDialog (MyDialog{22199eaa}) -> null
怎么可能?为什么会有两个不同的实例?为什么 onCreateDialog
被调用了两次?
我认为您应该像使用普通 Fragment 一样设置回调,在 onAttach(Context context)
中设置它并在 onDetach()
我不知道发生了什么,但我已经通过执行 callback
static static:
私有静态回调回调;
public static MyDialog newInstance(Callback callback) {
MyDialog.callback = callback;
return new MyDialog();
}
这是一个丑陋的解决方案...哦好吧...