显示加载/进度指示符的最佳方法是什么?

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

这可以通过编程来完成吗? 所以我不必在xml文件中添加加载微调器?

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中的select下拉菜单)

使用ProgressDialog

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

在这里输入图像说明

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

实际上,如果您正在等待服务器的响应,那么应该以编程方式完成。 您可以创build一个进度对话框并将其解散,但是这又不是“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; } } 

然后在你的活动中,设置你的Fragmentpipe理器,并在等待服务器启动时显示对话框:

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

一旦你的服务器响应完成,你会解雇它:

 myInstance.dismiss() 

请记住,progressdialog是一个微调器或一个进度条,具体取决于属性,请参阅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(); }