如何在DialogFragment之上打开ProgressDialog?

时间:2014-03-14 13:22:17

标签: android progressdialog android-dialogfragment

我有一个带有按钮的Android活动/布局。当我单击此按钮时,它会打开一个带有2个微调器的DialogFragment。当DialogFragment出现时,我需要使用Web服务返回的项填充这两个微调器。因此,在等待服务返回时,我想在我刚刚打开的DialogFragment上显示ProgressDialog。

问题是我似乎无法将ProgressDialog置于DialogFragment之上。我可以看到ProgressDialog显示在DialogFragment后面,是否可以将ProgressDialog显示在其他所有内容上?

我的代码是这样的:

public class RegionalFragment extends DialogFragment {

    private View view;
    private Activity activity;
    private Spinner spinner1;
    private Spinner spinner2;
    private ProgressDialog progressDialog;

    public RegionalFragment(Activity activity) {
        this.activity = activity;
        LayoutInflater inflater = activity.getLayoutInflater();
        view = inflater.inflate(R.layout.spinner_selection, null);
        this.progressDialog = new ProgressDialog(activity);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder =
            new AlertDialog.Builder(activity)
                    .setTitle(R.string.title)
                    .setView(view)
                    .setPositiveButton(R.string.ok, new MyListener(activity))
                    .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int id) {
                            getDialog().cancel();
                        }
                    });

        progressDialog.getWindow().setBackgroundDrawable(new ColorDrawable(1));
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setCancelable(false);
        progressDialog.setIndeterminate(true);
        progressDialog.setMessage("Please wait...");
        progressDialog.show();

        invokeAsyncWebService();

    return builder.create();
}

谢谢!

2 个答案:

答案 0 :(得分:3)

显然这是一个广泛抱怨ProgressDialog的主题,我建议你尝试使用构建器创建的普通对话框,其布局(由您自定义)包括进度条或加载或任何您需要的。这应该可以解决你的问题。

答案 1 :(得分:0)

由于配置更改而重新创建我的父DialogFragment时,我也遇到了问题。我无法再将progressDialog显示在顶部。 解决方案是在onResume()事件中显示progressDialog:

@Override
public void onResume() {
    super.onResume();
    if (inProgress) {
        progressDialog = ProgressDialog.show(ctx, "Report request", "connecting...", true);
    }
}