我有一個片段,可以創建並彈出一個DialogFragment,但是當我點擊後退按鈕時,即使我顯式調用setCancelable(false),它也會關閉對話框。有沒有辦法讓我的DialogFragment對後退按鈕不敏感?Android:如何防止後退按鈕取消FragmentDialog
public class LoadingDialogFragment extends DialogFragment
{
String title;
String msg;
public LoadingDialogFragment()
{
this.title = "Loading...";
this.msg = "Please wait...";
}
public LoadingDialogFragment(String title, String msg)
{
this.title = title;
this.msg = msg;
}
@Override
public Dialog onCreateDialog(final Bundle savedInstanceState)
{
final ProgressDialog dialog = new ProgressDialog(getActivity());
dialog.setTitle(title);
dialog.setMessage(msg);
dialog.setIndeterminate(true);
dialog.setCanceledOnTouchOutside(false);
dialog.setCancelable(false);
return dialog;
}
}
我來自的AsyncTask創建FragmentDialog:
private class GpsTask extends AsyncTask<String, Integer, Integer>
{
//ProgressDialog dialog;
@Override
protected void onPreExecute()
{
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
DialogFragment newFragment = new LoadingDialogFragment("Gathering Location", "Acquiring GPS lock...");
ft.addToBackStack(null);
newFragment.show(ft, "dialog");
}
@Override
protected Integer doInBackground(String... params)
{
//acquire a GPS lock and grab a few position updates
}
@Override
protected void onProgressUpdate(Integer... input) { }
@Override
protected void onPostExecute(Integer result)
{
getSupportFragmentManager().popBackStackImmediate();
}
}
這是正確的!事實證明,你必須在DialogFragment本身調用setCancelable(false),而不是它保存的內部對話框! – MattF 2012-04-16 10:02:47
@MattF這個評論是一種生活救星。沒有意識到我需要在'DialogFragment'而不是'ProgressDialog'上調用'setCancelable()'。謝謝! – prolink007 2015-09-22 15:40:26