2017-02-24 56 views
0

我已经在应用中创建了一个对话框片段。以下是它的代码。Android对话框片段不解除

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); 

但是,当我回到以前的活动,对话框仍然显示。在其他情况下,用于显示和解雇的代码工作正常。

我已经尝试了几种方法来解雇它,但不工作。任何人都可以帮助我呢?

感谢。

+0

没有你的代码落在这条线之下((前!= NULL))创建一个域? – k0sh

+0

在'AlertLoader'中投射'prev'然后尝试... –

+0

@ k0sh是的。 – Beena

回答

1

DialogFragment如下

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"); 
} 

然后使用该字段来驳回DialogFragment

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

即将推出此优惠 –

+0

从哪里调用'showLoader()'方法 – arjun