Tôi có một Phân đoạn có thể tạo và bật lên Hộp thoại, nhưng khi tôi nhấn nút quay lại, nó loại bỏ hộp thoại mặc dù tôi gọi rõ ràng setCancelable (sai); Có cách nào để DialogFragment của tôi không nhạy cảm với nút quay lại không?Android: Cách ngăn nút quay lại hủy một 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;
}
}
tôi tạo FragmentDialog từ một AsyncTask:
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();
}
}
Điều này đúng! nó chỉ ra rằng bạn phải gọi setCancelable (false) trên DialogFragment, không phải là Dialog bên trong mà nó giữ! – MattF
@MattF Nhận xét này là trình tiết kiệm cuộc sống. Không nhận ra tôi cần gọi 'setCancelable()' trên 'DialogFragment' thay vì' ProgressDialog'. Cảm ơn! – prolink007