Android 对话片段中的OnDismissListener
在我的应用程序中,我有一个打开对话框片段的片段。在我的对话框片段中,我从用户那里获取一些保存在静态类中的设置,但我需要一个侦听器来通知我的片段对话框已关闭 我使用这个链接的第一个答案中的代码,但这部分代码不起作用,因为我有一个片段,而不是一个活动。onDismiss方法在dialogfragment中被调用,但if语句失败,因此不调用片段。我试图用getFragmentManager、getParentFragment和get/setTargetFragment替换该部分,但不起作用 有人能帮我吗Android 对话片段中的OnDismissListener,android,fragment,listener,dismiss,Android,Fragment,Listener,Dismiss,在我的应用程序中,我有一个打开对话框片段的片段。在我的对话框片段中,我从用户那里获取一些保存在静态类中的设置,但我需要一个侦听器来通知我的片段对话框已关闭 我使用这个链接的第一个答案中的代码,但这部分代码不起作用,因为我有一个片段,而不是一个活动。onDismiss方法在dialogfragment中被调用,但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);
}*/
}
我认为你可以通过另一种方式来实现:
// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);
然后,您可以在
对话框FragmentImage
的public void onDismiss(最终对话框界面对话框)
中调用yourfragment.myDissmiss()
,我想您可以用另一种方法来实现它:
// create a function in YourFragment
public void myDissmiss();
// change your newInstance(bitmap) of your dialog fragment
public static DialogFragmentImage newInstance(Bitmap b,YourFragment f);
然后,您可以在
对话框FragmentImage
的公共void onDismiss(最终对话框界面对话框)
中调用yourfragment.myDissmiss()
,您可以尝试界面回调
在对话框片段中创建一个接口
public interface Listener{
void onDismiss();
}
在你的片段中实现这一点
public class MyFragment extends Fragment implements MyDialogFragment.Listener{
@Override
public void onDismiss(){
//write the operations here
}
}
现在在对话框片段中接收父片段的对象,
例:
您必须从片段中调用此方法,以设置侦听器
现在,在对话框片段的onDismiss()方法中,使用此引用调用onDismiss
前
进行必要的空检查
也请检查下面的链接
您可以尝试接口回调 在对话框片段中创建一个接口
public interface Listener{
void onDismiss();
}
在你的片段中实现这一点
public class MyFragment extends Fragment implements MyDialogFragment.Listener{
@Override
public void onDismiss(){
//write the operations here
}
}
现在在对话框片段中接收父片段的对象,
例:
您必须从片段中调用此方法,以设置侦听器
现在,在对话框片段的onDismiss()方法中,使用此引用调用onDismiss
前
进行必要的空检查
也请检查下面的链接
这是一个老问题,但我没有找到满意的解决方案。我不喜欢将任何侦听器传递给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);
这是一个老问题,但我没有找到我满意的解决方案。我不喜欢将任何侦听器传递给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);
你试过接口回调吗?我是Android新手,你能给我解释一下吗?使用
final Fragment=getParentFragment()
。并检查父片段是否是实现onDismissListener的片段。如果没有,请检查您的片段树。您尝试过接口回调吗?我是Android新手,您能给我解释一下吗?使用final fragment fragment=getParentFragment()
。并检查父片段是否是实现onDismissListener的片段。如果没有,请检查您的片段树。当我使用setListener时(此)不起作用,因为我在视图中。OnClickListener所以不接受“this”。有什么建议吗?我解决了,我用了完全不同的方法。感谢您的时间。当我使用setListener时(此)不起作用,因为我在视图中。OnClickListener所以不接受“此”。有什么建议吗?我解决了,我用了完全不同的方法。感谢您的时间。很抱歉我不理解您的答案。很抱歉我不理解您的答案。我完全更改了代码以找到解决方案,这是一个1年前完成的旧项目,因此我无法尝试使用此新代码来解决旧问题。顺便说一句,你发布的代码应该有用,我也喜欢你回答一个老问题的方式。老实说,我甚至找到了更好的解决方案。无法在DialogFragment上使用getDialog,然后设置Dislose侦听器的原因是FragmentTransaction尚未执行。因此,当您在FragmentManager getDialog上执行PendingTransactions时,将不会返回null。如果没有appcompat registerFragmentLifecycleCallbacks调用需要API级别26
我完全更改代码以找到解决方案,这是一个1年前完成的旧项目,因此我无法尝试使用此新代码来解决旧问题。顺便说一句,你发布的代码应该有用,我也喜欢你回答一个老问题的方式。老实说,我甚至找到了更好的解决方案。无法在DialogFragment上使用getDialog,然后设置Dislose侦听器的原因是FragmentTransaction尚未执行。因此,当您在FragmentManager上执行PendingTransactions时,getDialog将不会返回null。如果没有appcompat注册表,FragmentLifecycleCallbacks调用需要API级别26