显示加载/进度指示器的最佳方法?

Joc*_*ter 140 android android-spinner

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

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

Sur*_*jaj 287

Android Oreo不推荐使用ProgressDialog.请改用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();
Run Code Online (Sandbox Code Playgroud)

要么

ProgressDialog.show(this, "Loading", "Wait while loading...");
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多.

顺便说一句,Spinner在Android中有不同的含义.(就像HTML中的选择下拉列表一样)

  • 这是有效的,但是当我测试它时,我可以通过触摸它外面的屏幕或按*Back*按钮来关闭对话框.我通过添加对`progress.setCancelable(false);`的调用来解决这个问题. (33认同)
  • 'ProgressDialog`在Android O中被弃用了https://developer.android.com/reference/android/app/ProgressDialog.html (9认同)
  • 来自 Android 开发者网站:STYLE_SPINNER 创建一个带有圆形旋转进度条的 ProgressDialog。 (2认同)

vas*_*art 16

使用 ProgressDialog

ProgressDialog.show(Context context, CharSequence title, CharSequence message);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

  • @artworkadシ那么这个被认为是坏的方面 - 接受的答案是同一个反模式的一个例子吗?而建议做什么呢?链接到关于多个UX问题的非现场视频并没有真正改善这个答案. (12认同)
  • ProgressDialog`已在Android O中弃用https://developer.android.com/reference/android/app/ProgressDialog.html (2认同)

Ilk*_*aci 12

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

我在布局中包含了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" />
Run Code Online (Sandbox Code Playgroud)

并将其可见性更改为.GONE | .VISIBLE取决于用例.

    progressBar_cyclic.visibility = View.VISIBLE
Run Code Online (Sandbox Code Playgroud)


qui*_*tor 9

实际上,如果您正在等待来自服务器的响应,则应该以编程方式完成.您可以创建一个进度对话框并将其关闭,但是那时不是"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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

FragmentManager fm = getSupportFragmentManager();
MySpinnerDialog myInstance = new MySpinnerDialog();
}
myInstance.show(fm, "some_tag");
Run Code Online (Sandbox Code Playgroud)

服务器响应完成后,您将解雇它:

myInstance.dismiss()
Run Code Online (Sandbox Code Playgroud)

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


Isa*_*ais 5

这就是我这样做的方式,以便一次只能打开一个进度对话框。根据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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我也不得不用

protected void onResume() {
    dismissLoadingDialog();
    super.onResume();
}
Run Code Online (Sandbox Code Playgroud)

  • `ProgressDialog` 在 Android O 中被弃用 https://developer.android.com/reference/android/app/ProgressDialog.html (3认同)