问题描述
我有一个片段,它是父片段的许多子片段之一。另外,我有一个通过方法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");}
}