未调用java DialogFragment OnDismissListener
我刚刚做了一个构建,注意到我的代码不起作用,在设置了一些断点之后,我看到,实际上,discover();方法被调用,但问题是没有调用侦听器,因此侦听器中的代码永远不会执行。 我有我的片段A,在这里我显示了我的DialogFragment(DateDialog),当DateDialog被取消时,我有权从片段A中获取一些DateDialog值,但它不起作用。 这是我的原始代码,它不起作用:
//DATEDIALOG
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.datedialog, container, false);
localf = 安卓.text.format.DateFormat.getMediumDateFormat(getContext());
TomorrowB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setTomorrow();
HasDate = true;
dismiss();
}
});
return v;
}
//FRAGMENT A
DateB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final DateDialog d = new DateDialog();
d.show(getChildFragmentManagaer(), "DateDialog");
getChildFragmentManager().executePendingTransactions();
d.getDialog().setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
if (d.HasDate())
{
DoStuff();
}
}
});
然后,我决定用一个接口来更新它,但它也不起作用
//DATEDIALOG
public interface DismissListener{
void onDialogDismiss(DateDialog d);
}
private DismissListener mListener;
public void setDismissListener(DismissListener listener){
mListener = listener;
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.datedialog, container, false);
localf = 安卓.text.format.DateFormat.getMediumDateFormat(getContext());
TomorrowB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
setTomorrow();
HasDate = true;
dismiss();
}
});
return v;
}
//FRAGMENT A
DateB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final DateDialog d = new DateDialog();
d.setDismissListener(new DateDialog.DismissListener() {
@Override
public void onDialogDismiss(DateDialog d) {
if (d.HasDate())
{
DoStuff();
}
}
我也尝试了OnCancelListener(),但它是一样的
PS:
这确实有效,直到几天前,我不知道我从支持库迁移到AndroidX库是否有什么关系
# 1 楼答案
根据^{} documentation
情况一直如此
您应该创建自己的回调接口,并从DateDialog的
onDismiss()
调用它,而不是直接调用setOnDismissListener
:然后像这样使用:
# 2 楼答案
这是因为你迁移到AndroidX。 在AndroidX中注册Dismise listener的新方法称为onDismiss(),而不是setOnDismissListener()。你可以参考文档here。实际上,Android studio应该在编译时给你错误的方法。可能您已经实现了这两个库。 因此,您的代码(来自第一个示例)应该如下所示: