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

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

这是否可以通过编程实现? 这样我就不必在 xml 文件中添加加载旋转器了吗?

215588 次浏览

使用 ProgressDialog

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

enter image description here

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

在 Android Oreo 中不推荐使用 ProgressDialog ,而应使用 进度条

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...");

你可在此浏览更多资料。

顺便说一下,旋转在 Android 中有不同的含义

实际上,如果您正在等待来自服务器的响应,那么 应该将以编程方式完成。你可以创建一个进度对话框,然后关闭它,但是这并不是“机器人的方式”。

目前推荐的方法是使用 对话片段:

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()

请记住,进度对话框是一个微调器或进度条,具体取决于属性,详细信息请参阅 API 指南

我是这样做的,这样一次只能打开一个进度对话框。基于 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();
}

自从 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" />

并根据用例将其可见性更改为。

    progressBar_cyclic.visibility = View.VISIBLE