【问题标题】:Progress bar on a button click单击按钮上的进度条
【发布时间】:2011-10-07 05:51:51
【问题描述】:

在我的应用程序中,只需单击一个按钮,应用程序就会进行一些处理,通过网络发送一些数据,然后停止。由于需要一些时间,我尝试放入进度条。进度条的代码位于按钮的 onclick 侦听器的开头。在进度条码之后,通过网络处理和发送数据。 但是进度条根本不可见。我是否需要在单独的线程中显示进度条?

这是我用来显示进度条的东西

final ProgressDialog pd=new ProgressDialog(this);
pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
pd.setMessage("Please wait..");
pd.setCancelable(true);
pd.setIndeterminate(true);
pd.show();

【问题讨论】:

    标签: android onclick progress-bar


    【解决方案1】:

    使用用于在后台进行处理的 AsyncTask 类,您也可以在那里显示进度条

    这是 AsyncTask 的简单 sn-p 代码

    class BackgroundProcess extends AsyncTask<Void,Void,Void>{
       private ProgressDialog progress;
       public doInBackground(Void...arg){
            publishProgress();
            // do your processing here like sending data or downloading etc.
       }
       @Override
       protected void onProgressUpdate(Void... values) {
        super.onProgressUpdate(values);
        progress = ProgressDialog.show(YourActivity.this, "", "Wait...");       
       }
       @Override
       protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        if(progress!=null)
            progress.dismiss();
        progress = null;
       }
    }
    

    现在像这样在按钮 onclick 监听器中初始化并执行它

    new BackgroundProcess().execute();
    

    现在 progressdialog 将被发布并出现在屏幕上,当进程完成后,从 onPostExecute() 中退出进度对话框

    【讨论】:

      【解决方案2】:

      我将您的代码粘贴到我的应用程序中,它运行良好。您是从 UI 线程调用所有这些吗?如果您正在执行一些繁重的处理和数据传输,请确保不要在 UI 线程上运行。制作一个 AsyncTask 来处理网络的东西。

      编辑:我将它移到了它自己的线程中,它不再工作,所以请确保它是从 UI 线程调用的。

      【讨论】:

      • 是的..我正在从 UI 线程本身完成所有工作..通过网络进行大量数据传输..所以我想,我必须做AsyncTask 来实现工作..谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 2014-02-11
      • 2016-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多