2012-08-22 107 views
0

现在,这是我在android中的第一步。我只是试图用“下载”按钮来实现进度条。当我按下载按钮进度条不断进行,但当整个进度结束时,我无法隐藏进度条。这是我的代码。请帮帮我。线程进度条

public class ProgressBarDemo extends Activity 
{ 

    ProgressBar pb; 
    Button bt; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.progressbar); 

     pb = (ProgressBar) findViewById(R.id.progressBar1); 
     bt = (Button) findViewById(R.id.button1); 

     pb.setVisibility(View.VISIBLE); 

     bt.setOnClickListener(new OnClickListener() 
     { 

      public void onClick(View v) 
      { 
       Thread timer = new Thread() 
       { 
        public void run() 
        { 
         try 
         { 
          for(int i=0; i<=50; i ++) 
          { 
           pb.incrementProgressBy(i); 
           sleep(1000); 
          } 

           pb.setVisibility(View.INVISIBLE); 
           Toast.makeText(ProgressBarDemo.this, "Thank you for downloading", Toast.LENGTH_SHORT).show(); 

         }catch(Exception e){} 

        } 
       }; 
       timer.start(); 
      } 

     }); 

    } 

} 

回答

0

你也可以使用AsynTask这是一个更好的解决方案...

public class ProgressBarDemo extends Activity 
{ 

    ProgressBar pb; 
    Button bt; 
@Override 
    protected void onCreate(Bundle savedInstanceState) 
{ 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 

pb = (ProgressBar) findViewById(R.id.progressBar1); 
bt = (Button) findViewById(R.id.button1); 

pb.setVisibility(View.VISIBLE); 

bt.setOnClickListener(new OnClickListener() 
{ 

    public void onClick(View v) 
    { 
     new AsynTasks().execute(); 
    } 
}); 

} 

class AsynTasks extends AsyncTask<Void, Integer, Void> 
{ 

    @Override 
    protected Void doInBackground(Void... params) { 
     for(int i=1;i<=100;i++) 
     { 
      SystemClock.sleep(1000); 
      publishProgress(i); 
     } 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void result) { 
     super.onPostExecute(result); 
      pb.setVisibility(View.INVISIBLE); 
      Toast.makeText(ProgressBarDemo .this, "Thank you for downloading", Toast.LENGTH_SHORT).show(); 
    } 
    @Override 
    protected void onProgressUpdate(Integer... values) { 
     super.onProgressUpdate(values); 
      pb.setProgress(values[0]); 
    } 
} 
} 
+0

是的工作,但有一个修改... for(int i = 1,i <= 100; i ++) –

+0

请听........ finlly它适用于你 –

+0

我需要显示百分比增量以及...我怎么能?谢谢... –

0

您应该只从mainThread(UI线程)modifiy UI元素尝试

pb.post(new Runnable() { 

     @Override 
     public void run() { 
      pb.setVisibility(View.INVISIBLE); 
     } 
    }) 

代替。

也许你必须使用相同的东西来增加你的进度条。 Alternativley你可以使用AsyncTask http://developer.android.com/reference/android/os/AsyncTask.html类。 onProgressUpdate和onPostExecute在UIThread中自动调用。

+0

嘿,这是不工作 –

0

你不应该从不同thread.Use这个UI做任务...

public class ProgressBarDemo extends Activity 
    { 

     ProgressBar pb; 
     Button bt; 
    @Override 
     protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    pb = (ProgressBar) findViewById(R.id.progressBar1); 
    bt = (Button) findViewById(R.id.button1); 

    pb.setVisibility(View.VISIBLE); 

    bt.setOnClickListener(new OnClickListener() 
    { 

     public void onClick(View v) 
     { 
      Thread timer = new Thread() 
      { 
       public void run() 
       { 
        try 
        { 
         for(int i=1; i<=100; i ++) 
         { 
          pb.setProgress(i); 
          sleep(100); 
         } 


           }catch(Exception e){} 
        finally{ 
         runOnUiThread(new Runnable() { 
          public void run() { 
           pb.setVisibility(View.INVISIBLE); 
          Toast.makeText(ProgressBarDemo .this, "Thank you for downloading", Toast.LENGTH_SHORT).show(); 
          } 
         }); 
        } 

       } 
      }; 
      timer.start(); 
     } 

    }); 

} 


    } 
+0

嘿,我试过这个,但没有工作。 –

+0

终于把你的代码。复制上面的代码,我做了一些修改 –

+0

是的,它的工作,但完成整个进度完成后,需要1或2分钟。 –