ParentFragmentManager和ChildFragmentManager给出错误的行为

问题描述

我有一个片段,它是父片段的许多子片段之一。另外,我有一个通过方法show(FragmentManager,tag)调用自定义警报对话框的实例。

问题是当警报片段出现在当前片段上方时,我无法实现所需的行为。如果我使用getParentFragmentManager或getSupportFragmentManager,它将在层次结构中位于该父片段上方的位置打开,当我使用getChildFragmentManageк时,它将显示一秒钟并消失。

尝试了所有遇到的东西后,我几乎迷失了。非常感谢您的帮助。

这是我的自定义警报对话框的一部分

public class CustomAlertDialog extends BaseDialogFragment {
    private AlertdialogBinding mBinding;
    private final OnDialogClickListener mDialogClickListener;

    public CustomAlertDialog (OnDialogClickListener listener) {
        mDialogClickListener = listener;
    }

    public interface OnDialogClickListener {
        void onPositiveClick(CustomAlertDialog dialog);

        void onNegativeClick(CustomAlertDialog dialog);

        void onClick(CustomAlertDialog dialog,int which);

    }

    public static CustomAlertDialog newInstance(String title,String message,Boolean positive,Boolean negative,OnDialogClickListener listener) {
        CustomAlertDialog fragment = new CustomAlertDialog(listener);
        Bundle args = new Bundle();
        args.putString(ALERT_DIALOG_TITLE_KEY,title);
        args.putString(ALERT_DIALOG_MESSAGE_KEY,message);
        args.putBoolean(ALERT_DIALOG_BUTTON_OK_KEY,positive);
        args.putBoolean(ALERT_DIALOG_BUTTON_CANCEL_KEY,positive);
        fragment.setArguments(args);
        return fragment;
    }

这就是我从父片段的子片段中调用它的方式

 CustomAlertDialog customAlertDialog  = CustomAlertDialog.newInstance(getResources().getString(R.string.dialog_title),getResources().getString(R.string.alert),true,false,new CustomAlertDialog.OnDialogClickListener() {

                                @Override
                                public void onPositiveClick(CustomAlertDialog dialog) {
                                    return;
                                }

                                @Override
                                public void onNegativeClick(CustomAlertDialog  dialog) {

                                }

                                @Override
                                public void onClick(CustomAlertDialog  dialog,int which) {

                                }
                            });
                            customAlertDialog .show(getParentFragmentManager(),"dialog");}

如何实现对话框位于当前片段上方的位置?

解决方法

尝试使用getParentFragment().getParentFragmentManager()

,

在您写的其中一条评论中,您正在从 onCreateView 调用您的对话框。我不确定,但我认为在 onViewCreated 中调用它是调用对话框的正确方法

     @Override
public void onViewCreated(@NonNull View view,@Nullable Bundle savedInstanceState) {
    super.onViewCreated(view,savedInstanceState);
CustomAlertDialog customAlertDialog  = CustomAlertDialog.newInstance(getResources().getString(R.string.dialog_title),getResources().getString(R.string.alert),true,false,new CustomAlertDialog.OnDialogClickListener() {

                            @Override
                            public void onPositiveClick(CustomAlertDialog dialog) {
                                return;
                            }

                            @Override
                            public void onNegativeClick(CustomAlertDialog  dialog) {

                            }

                            @Override
                            public void onClick(CustomAlertDialog  dialog,int which) {

                            }
                        });
                        customAlertDialog .show(getParentFragmentManager(),"dialog");}

}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...