在我应用程序中,我有一个打开对话框片段的片段。在我的对话片段中,我接受了来自用户的一些设置,这些设置保存在一个静态类中,但我需要一个侦听器来通知我的片段对话框已关闭。
我使用了这个链接stackoverflow question的第一个答案中的代码,但这部分代码不起作用,因为我有一个片段,而不是一个活动。在dialogfragment中调用了onDismiss方法,但if语句失败,因此不会调用该片段。我尝试用getFragmentManager、getParentFragment和get/setTargetFragment替换这一部分,但不起作用。
有人能帮帮我吗?
public void onDismiss(final DialogInterface dialog) {
super.onDismiss(dialog);
// code I've tried
final FragmentManager fragment = getFragmentManager();
if (fragment instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) fragment).onDismiss(dialog);
}
// original answer code
/*final Activity activity = getActivity();
if (activity instanceof DialogInterface.OnDismissListener) {
((DialogInterface.OnDismissListener) activity).onDismiss(dialog);
}*/
}
发布于 2017-05-17 14:58:21
这是一个古老的问题,但我没有找到我满意的解决方案。我不喜欢将任何侦听器传递给我的DialogFragment或设置一个TargetFragment,因为这可能会在方向更改时中断。你觉得这个怎么样?
MyDialog d = new MyDialog();
d.show(fragmentManager, "tag");
fragmentManager.registerFragmentLifecycleCallbacks(new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentViewDestroyed(FragmentManager fm, Fragment f) {
super.onFragmentViewDestroyed(fm, f);
//do sth
fragmentManager.unregisterFragmentLifecycleCallbacks(this);
}
}, false);
发布于 2015-11-10 11:35:46
您可以尝试接口回调,
在对话框片段中创建一个接口
public interface Listener{
void onDismiss();
}
在片段中实现这一点,
public class MyFragment extends Fragment implements MyDialogFragment.Listener{
@Override
public void onDismiss(){
//write the operations here
}
}
现在,在对话框片段中接收父片段对象,例如:
public void setListener(Listener listener){
this.mListener = listener;
}
您必须从片段中调用此方法,以设置侦听器。
现在,在对话框片段的onDismiss()方法中,使用以下引用调用onDismiss
例如
@Override
public void onDismiss(){
mListener.onDismiss();
}
执行必要的null检查
也可以在下面的链接中查看
How to get button clicks in host fragment from dialog fragment
发布于 2015-11-10 11:27:39
我认为你可以用另一种方式来实现它:
// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);
然后,您可以在您的public void onDismiss(final DialogInterface dialog)
of DialogFragmentImage
中调用yourfragment.myDissmiss()
。
https://stackoverflow.com/questions/33628603
复制相似问题