【问题标题】:How to start and finish progressBar dynamically in android如何在android中动态启动和完成progressBar
【发布时间】:2011-05-27 09:57:15
【问题描述】:

当我从第一个活动类中跳过第二个活动类时,我将在第二个活动中对某个图像开始图像处理,然后直到新图像出现在屏幕上,我不想启动进度条,然后在新图像出现在屏幕上时完成。我该怎么做?

【问题讨论】:

    标签: android android-layout android-widget progress-bar


    【解决方案1】:

    使用 ProgreaaDialog 和 AsyncTask。你会得到你的灵魂 在 doBackInGroundProcess 中使用 AsyncTask 进行图像处理。并在 doPostExecute() 中退出或取消进度对话框

    查看示例代码。 要启动 AsyncTsk,请在要进行图像处理的活动中使用 new ProgressTask().execute(null);

        private class ProgressTask extends AsyncTask<String, Void, Boolean> {
            private ProgressDialog dialog;
            List<Message> titles;
            private ListActivity activity;
            //private List<Message> messages;
            public ProgressTask(ListActivity activity) {
                this.activity = activity;
                context = activity;
                dialog = new ProgressDialog(context);
            }
    
    
    
            /** progress dialog to show user that the backup is processing. */
    
            /** application context. */
            private Context context;
    
            protected void onPreExecute() {
                this.dialog.setMessage("Progress start");
                this.dialog.show();
            }
    
                @Override
            protected void onPostExecute(final Boolean success) {
                    List<Message> titles = new ArrayList<Message>(messages.size());
                    for (Message msg : messages){
                        titles.add(msg);
                    }
                    MessageListAdapter adapter = new MessageListAdapter(activity, titles);
                    activity.setListAdapter(adapter);
                    adapter.notifyDataSetChanged();
    
                    if (dialog.isShowing()) {
                    dialog.dismiss();
                }
    
                if (success) {
                    Toast.makeText(context, "OK", Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(context, "Error", Toast.LENGTH_LONG).show();
                }
            }
    
            protected Boolean doInBackground(final String... args) {
                try{    
                    BaseFeedParser parser = new BaseFeedParser();
                    messages = parser.parse();
    
    
                    return true;
                 } catch (Exception e){
                    Log.e("tag", "error", e);
                    return false;
                 }
              }
    
    
        }
    
    }
    

    有一个look here

    【讨论】:

      【解决方案2】:

      尝试使用如下所示的异步任务:

      try{
      class test extends AsyncTask{
      
      
           TextView tv_per;
           int mprogress;
      
          Dialog UpdateDialog = new Dialog(ClassContext);
      
          @Override
          protected void onPreExecute() {
              // TODO Auto-generated method stub
              mprogress = 0;
      
              UpdateDialog.setTitle(getResources().getString(R.string.app_name));
              UpdateDialog.setContentView(R.layout.horizontalprogressdialog);
              TextView dialog_message =  (TextView)UpdateDialog.findViewById(R.id.titleTvLeft);
              tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
              dialog_message.setText(getResources().getString(R.string.dialog_retrieving_data));
              dialog_message.setGravity(Gravity.RIGHT);
              UpdateDialog.setCancelable(false);
              UpdateDialog.show();
              super.onPreExecute();
          }
      
      
      
          @Override
          protected void onProgressUpdate(Object... values) {
              // TODO Auto-generated method stub
              ProgressBar update = (ProgressBar)UpdateDialog.findViewById(R.id.horizontalProgressBar);
              update.setProgress((Integer) values[0]);
              int percent =  (Integer) values[0];
              if(percent>=100)
              {
                  percent=100;
              }
              tv_per = (TextView)UpdateDialog.findViewById(R.id.hpd_tv_percentage);
               tv_per.setText(""+percent);
          }
      
      
      
          @Override
          protected Object doInBackground(Object... params) {
              // TODO Auto-generated method stub
              //your code
      }
      
              super.onPostExecute(result);
              UpdateDialog.dismiss();
          }
      
       }
       new test().execute(null);
      
       }
      catch(Exception e)
      {
       e.printStackTrace();
      }
      

      【讨论】:

        【解决方案3】:

        这是一个在调用时启动进度条的方法

        private void downloadText(String urlStr) {
        
            final String url = urlStr;
             progressDialog = ProgressDialog.show(this, "", "Trying to register...");
            Log.i("First string", urlStr);
        try{
            new Thread () {
                public void run() {
                    int BUFFER_SIZE = 2000;
                    InputStream in = null;
                    try{
                   msg = Message.obtain();
                    msg.what=1;
                    }catch(Exception e)
                    {
                    }
        
                    try {
                        in = openHttpConnection(url);
                   InputStreamReader isr = new InputStreamReader(in);
                        int charRead;
                          text = "";
                          char[] inputBuffer = new char[BUFFER_SIZE];
        
                              while ((charRead = isr.read(inputBuffer))>0)
                              {                    
                                  //---convert the chars to a String---
                                  String readString = 
                                  String.copyValueOf(inputBuffer, 0, charRead);                    
                                  text += readString;
                                  inputBuffer = new char[BUFFER_SIZE];
                              }
                             Bundle b = new Bundle();
                                b.putString("text", text);
                                msg.setData(b);
                              in.close();
        
                    }catch (Exception e) {
        
                    //////////////////////////////////////  
                        e.printStackTrace();
                    }
                    try{
                    messageHandler.sendMessage(msg);
                    }catch(Exception e)
                    {
                    }
                }
            }.start();
        }catch(Exception e)
        {
        
        }
        
        }
        

        这是处理程序代码

        private Handler messageHandler = new Handler() {
        
        
            public void handleMessage(Message msg) {
                try{
                super.handleMessage(msg);
                switch (msg.what) {
        
                case 1:
        

        { 休息; } } progressDialog.dismiss(); }catch(异常 e) {

                }
                }
        
        };
        

        【讨论】:

          【解决方案4】:

          试试这个方法 首先初始化你的 ProgressDialog

           progressDialog = ProgressDialog.show(this, "", "Trying to ...");
          

          然后启动一个新线程,您可以在其中编写需要执行的代码 最后在处理程序中处理代码并结束progessDialog

          【讨论】:

            猜你喜欢
            • 2012-07-04
            • 1970-01-01
            • 1970-01-01
            • 2016-03-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-02-15
            • 1970-01-01
            相关资源
            最近更新 更多