Android显示/隐藏DialogFragment

3

我有一个自定义的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中,当按下“确定”时:

getDialog().hide();

按下“确定”后,DialogFragment被隐藏,但当我解锁屏幕时,DialogFragment会重新显示。如何消除这个问题?

我认为您的应用程序在屏幕解锁后会重新启动。因此,当活动停止时,您必须保存应用程序的当前状态,并在屏幕解锁后手动恢复它。 - Chris623
尝试使用 getDialog().dismiss(); - AmanSinghal
1个回答

0

您可以通过片段视图的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();
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接