Android Fragments android显示隐藏对话框片段

ubby3x7f  于 2023-02-04  发布在  Android
关注(0)|答案(1)|浏览(121)

我有从另一个片段调用的自定义DialogFragment

final CustomCalendarDialogFragment newFragment = new CustomCalendarDialogFragment("CHOOSE_WEEK");
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (newFragment.isAdded()){
            newFragment.getDialog().show();
        } else {
            newFragment.show(getFragmentManager(), "CUSTOM_CALENDAR");
        }
    }
});

CustomCalendarDialogFragment中,当按下“OK”时:

getDialog().hide();

按下“OK”后,DialogFragment隐藏,但当我解锁屏幕时,DialogFragment显示。如何消除?

monwx1rj

monwx1rj1#

可以在片段视图的tag属性中跟踪显示/隐藏对话框的状态。
onCreateView()中初始设置为true(相当于所示

@Nullable
@org.jetbrains.annotations.Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.bottom_sheet, container, false);
    view.setTag(true);
    return view
}

无论何时显示/隐藏它,请将其设置为true/false:

final CustomCalendarDialogFragment newFragment = new CustomCalendarDialogFragment("CHOOSE_WEEK");
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (newFragment.isAdded()){
            newFragment.getDialog().show();
        } else {
            newFragment.show(getFragmentManager(), "CUSTOM_CALENDAR");
            newFragment.requireView().setTag(true);
        }
    }
});

调用getDialog().hide();时设置newFragment.requireView().setTag(false);
当应用程序转到后台时,检查onResume()上的标记,看看是要保持对话框显示还是隐藏它:

@Override
protected void onResume() {
    super.onResume();

    Object tag = newFragment.requireView().getTag();
    if (tag instanceof Boolean){
        if ((!(boolean)tag))
            newFragment.getDialog().hide();
    }

}

相关问题