164

在应用程序等待服务器响应时显示加载微调器的最佳方式是什么?

这可以通过编程方式完成吗?这样我就不必在 xml 文件中添加负载微调器了吗?

4

5 回答 5

305

ProgressDialog已从 Android Oreo 中弃用。改用ProgressBar _

ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setMessage("Wait while loading...");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
// To dismiss the dialog
progress.dismiss();

或者

ProgressDialog.show(this, "Loading", "Wait while loading...");

在这里阅读更多。

顺便说一句,Spinner在 Android 中有不同的含义。(就像 HTML 中的选择下拉菜单)

于 2012-10-11T14:50:49.313 回答
25

自 API 级别 26 https://developer.android.com/reference/android/app/ProgressDialog.html以来,ProgressDialog 已被弃用

我在我的布局中包含一个 ProgressBar

   <ProgressBar
        android:layout_weight="1"
        android:id="@+id/progressBar_cyclic"
        android:visibility="gone"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:minHeight="40dp"
        android:minWidth="40dp" />

并将其可见性更改为 .GON​​E | .VISIBLE 取决于用例。

    progressBar_cyclic.visibility = View.VISIBLE
于 2018-02-08T09:46:39.727 回答
16

采用ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);

在此处输入图像描述

然而,这在今天(2013 年)被认为是一种反模式:http ://www.youtube.com/watch?v=pEGWcMTxs3I

于 2012-10-11T14:31:46.247 回答
10

实际上,如果您正在等待服务器的响应,则应该以编程方式完成。您可以创建一个进度对话框并将其关闭,但这又不是“android 方式”。

目前推荐的方法是使用DialogFragment

public class MySpinnerDialog extends DialogFragment {

    public MySpinnerDialog() {
        // use empty constructors. If something is needed use onCreate's
    }

    @Override
    public Dialog onCreateDialog(final Bundle savedInstanceState) {

        _dialog = new ProgressDialog(getActivity());
        this.setStyle(STYLE_NO_TITLE, getTheme()); // You can use styles or inflate a view
        _dialog.setMessage("Spinning.."); // set your messages if not inflated from XML

        _dialog.setCancelable(false);  

        return _dialog;
    }
}

然后在您的活动中设置您的片段管理器并在等待服务器开始后显示对话框:

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");

一旦您的服务器响应完成,您将关闭它:

myInstance.dismiss()

请记住,progressdialog 是一个微调器或进度条,具体取决于属性,请阅读api 指南

于 2012-10-11T14:56:51.487 回答
6

我就是这样做的,这样一次只能打开一个进度对话框。根据 Suraj Bajaj 的回答

private ProgressDialog progress;



public void showLoadingDialog() {

    if (progress == null) {
        progress = new ProgressDialog(this);
        progress.setTitle(getString(R.string.loading_title));
        progress.setMessage(getString(R.string.loading_message));
    }
    progress.show();
}

public void dismissLoadingDialog() {

    if (progress != null && progress.isShowing()) {
        progress.dismiss();
    }
}

我也不得不使用

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}
于 2014-01-16T14:40:06.627 回答