在我的应用程序中,我有一个打开对话框片段的片段。在我的对话框片段中,我从用户输入了一些保存在静态类中的设置,但我需要一个监听器来通知我的Fragment对话框已关闭。
我使用此链接stackoverflow question的第一个答案中的代码,但这部分代码不起作用,因为我有一个片段而不是一个活动。 onDismiss方法在dialogfragment中调用,但if语句失败,因此不调用片段。我试图用getFragmentManager和getParentFragment以及get / setTargetFragment替换该部分,但是不起作用。
有人可以帮我吗?
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize">
答案 0 :(得分:2)
这是一个老问题,但我找不到任何我满意的解决方案。我不喜欢将任何监听器传递给我的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);
答案 1 :(得分:0)
我认为你可以通过另一种方式存档它:
// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);
然后,您可以在yourfragment.myDissmiss()
的{{1}}中致电public void onDismiss(final DialogInterface dialog)
。
答案 2 :(得分:0)
您可以尝试接口回叫,
在对话框片段中创建一个界面
public class MyFragment extends Fragment implements MyDialogFragment.Listener{
@Override
public void onDismiss(){
//write the operations here
}
}
在你的片段中实现这个,
public void setListener(Listener listener){
this.mListener = listener;
}
现在在你的对话框片段中收到你父片段的对象, 例如:
@Override
public void onDismiss(){
mListener.onDismiss();
}
你必须从你的片段调用这个方法来设置监听器。
现在在对话框片段的onDismiss()方法中使用此引用调用onDismiss
离
infoWindow
进行必要的空检查
检查以下链接
How to get button clicks in host fragment from dialog fragment