android - MainActivity中如何设置DialogFragment的onDismissListener?
问题描述
我写的类MyWindow
扩展DialogFragment
public class MyWindow extends DialogFragment {
public Button yes;
public Button cancel;
public Button no;
public int result;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.save_layout, container);
initButton(view);
return view;
}
private void initButton(View view) {
yes = view.findViewById(R.id.yes_button);
cancel = view.findViewById(R.id.cancel_button);
no = view.findViewById(R.id.no_button);
yes.setOnClickListener(new View.OnClickListener() {//
@Override
public void onClick(View view) {
result = 1;
dismiss();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
result = 0;
dismiss();
}
});
no.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
result = -1;
dismiss();
}
});
}
}
我想创建一个MyWindow
( mywindow
) in的实例MainActivity
,并执行 MainActivity 的函数以myWindow.result
在它关闭后读取。我尝试直接调用mywindow.setOnDismissListener
,MainActivity
但程序无法编译。我试图添加
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
到 MyWindow,它仍然不起作用。
有没有办法在 MainActivity 中设置 DialogInterface 的 onDismissListener?
编辑:
在MainActivity
中,我myWindow
用
myWindow = new MyWindow();
myWindow.show(getSupportFragmentManager(), "confirm_dialog");
解决方案
让你的 Activity 实现 OnDismissListener
public final class YourActivity extends Activity implements DialogInterface.OnDismissListener {
@Override
public void onDismiss(final DialogInterface dialog) {
//Fragment dialog had been dismissed
}
}
DialogFragment已经实现了OnDismissListener,只需重写方法,调用Activity即可。
public final class DialogFragmentCustom extends DialogFragment {
///blah blah
@Override
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}
}
}
试试这个。
推荐阅读
- amazon-web-services - 在 CDK 中检索 EKS 构造的 LoadBalancer URL
- python-3.x - 我正在尝试使用 selenium/python 从具有 ::before 选择器的标签中提取文本
- javascript - 不断收到错误,因为 getElementById 返回 null
- excel - 未保存的 excel 文件 VB.NET VSTO 的问题
- excel - 如何使用 EXCEL VBA 中的宏发送 Outlook 邮件?
- c++ - 即使球体在场景中滚动,PhysX getLocalPose 也会返回 (0,0,0)
- python - A2C 代理在简单的 2D 网格世界中不学习任何东西
- html - 在两个堆叠的 svg 图像之间创建空间
- json - 如何将 base64 解码为字符串 Swift
- javascript - 无法控制台记录对象的属性