Android对话框片段未被驳回

Android对话框片段未被驳回,android,android-dialogfragment,Android,Android Dialogfragment,我在应用程序中创建了一个对话框片段。下面是它的代码 public class AlertLoader extends DialogFragment { Typeface fontRegular; Bundle bundle; String displayText = ""; public static AlertLoader newInstance(@NonNull String displayText) { AlertLoader alertPopUpMenu = new A

我在应用程序中创建了一个对话框片段。下面是它的代码

public class AlertLoader extends DialogFragment {

Typeface fontRegular;


Bundle bundle;

String displayText = "";

public static AlertLoader newInstance(@NonNull String displayText) {
    AlertLoader alertPopUpMenu = new AlertLoader();

    Bundle args = new Bundle();
    args.putString("displayText", displayText);
    alertPopUpMenu.setArguments(args);

    return alertPopUpMenu;
}


@Override
public void onStart() {
    super.onStart();
    Dialog dialog = getDialog();
    if (dialog != null && dialog.getWindow() != null) {
        dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
    }
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    bundle = getArguments();
    setStyle(STYLE_NO_TITLE, R.style.LoaderDialogTheme);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    getDialog().setCanceledOnTouchOutside(false);
    return inflater.inflate(R.layout.alert_dialog_loader, container, false);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    init(view);
}

private void init(View mainView) {
    displayText = bundle.getString("displayText");

    TextView mLoadingText = (TextView) mainView.findViewById(R.id.loadertext);
    mLoadingText.setTextColor(Color.WHITE);

    mLoadingText.setTypeface(fontRegular);

    if (displayText == null || displayText.length() == 0) {
        mLoadingText.setVisibility(View.GONE);
    } else {
        mLoadingText.setText(displayText);
        mLoadingText.setVisibility(View.VISIBLE);
    }
}

public void dismissCurrentView() {
    getDialog().dismiss();

}

}
我使用下面的代码来显示这个对话框

 private void showLoader(String displayText) {
    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        ft.remove(prev);
    }
    ft.addToBackStack(null);

    AlertLoader newFragment = AlertLoader.newInstance(displayText);
    newFragment.show(ft, "dialog");
}
它工作得很好。我试图通过以下代码来消除它

    private void dismissLoader() {
    Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
    if (prev != null) {
        DialogFragment df = (DialogFragment) prev;
        df.dismiss();
    }
}
在导航到下一个活动之前,我将解除加载程序。下面是我的代码,我在这里解雇加载器

   dismissLoader();
   Intent intent = new Intent(getActivity(), ShareMediaActivity.class);
   intent.putExtra(UserDefault.bundlePath, file.getAbsolutePath());
   startActivity(intent);
但当我回到上一个活动时,对话框仍然显示。在其他情况下,此显示和解雇代码可以正常工作

我试过几种方法来消除它,但都不起作用。有人能帮我吗


谢谢。

对话框片段创建一个字段,如下所示

private AlertLoader newFragment;

private void showLoader(String displayText) {
  FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
  Fragment prev = getSupportFragmentManager().findFragmentByTag("dialog");
  if (prev != null) {
      ft.remove(prev);
  }
  ft.addToBackStack(null);

  newFragment = AlertLoader.newInstance(displayText);
  newFragment.show(ft, "dialog");
}
然后使用该字段关闭
对话框片段

private void dismissLoader() {
  if (newFragment != null) {
      newFragment.dismiss();
  }
}

您的代码是否曾经落在这一行((prev!=null))下?在
AlertLoader
中强制执行
prev
,然后尝试…@k0sh是的。@ak sacha让我试着从哪里调用
showLoader()
方法