我有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
被调用两次,第二次onCreateDialog
被callback
:
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
}
被调用两次?
答案 0 :(得分:1)
我认为您应该像使用普通片段一样设置回调,在onAttach(Context context)
中设置并在onDetach()
中删除
答案 1 :(得分:0)
我不知道发生了什么,但我通过callback
静态静态解决了问题:
private static Callback回调;
public static MyDialog newInstance(Callback callback) {
MyDialog.callback = callback;
return new MyDialog();
}
这是一个丑陋的解决方案......哦,好吧......