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()
方法