2012-01-02 118 views
0
final ProgressDialog Pdialog = ProgressDialog.show(SpinnerClass.this, "", 
         "Loading. Please wait...", true); 
       Thread ProgressThread = new Thread() { 
        @Override 
        public void run() { 
         try { 
            sleep(3000); 
            Pdialog.dismiss(); 

         } catch(InterruptedException e) { 
          // do nothing 
         } finally { 

         } 
        } 
       }; 
       ProgressThread.start(); 
       TabHost1 TabHost1Object2 = new TabHost1(); 
       TabHost1Object2.tabHost.setCurrentTab(2); 

我在這個線程中遇到的問題是它在進程對話框啓動之前設置了當前選項卡。我做錯了什麼? 我想讓對話框運行並關閉,並在線程完成後設置選項卡。Android:Thread with progressBar and setcurrentTab

回答

0

的事情是,你正在啓動一個線程,這將不會影響你的主界面。所以最終會發生的是,你的線程將單獨運行,這將允許你的代碼的下一行被執行。所以在你的情況下,

  TabHost1 TabHost1Object2 = new TabHost1(); 
      TabHost1Object2.tabHost.setCurrentTab(2); 

這些行將被執行,而不管你的線程是否同時執行。所以你可以在這裏做什麼,你可以去AsyncTask或創建處理程序來處理這部分代碼。你必須像這樣改變你的代碼。

的onCreate()

  Handler handler; 
    handler = new Handler() { 
     @Override 
     public void handleMessage(Message msg) { 
      if (msg.what == 0) { 
     Pdialog.dismiss();  
      TabHost1 TabHost1Object2 = new TabHost1(); 
      TabHost1Object2.tabHost.setCurrentTab(2); 

     } 
     }; 

現在在你的線程,稱這樣的處理程序,

final ProgressDialog Pdialog = ProgressDialog.show(SpinnerClass.this, "", 
        "Loading. Please wait...", true); 
      Thread ProgressThread = new Thread() { 
       @Override 
       public void run() { 
        try { 
           sleep(3000); 


        } catch(InterruptedException e) { 
         // do nothing 
        } finally { 

          handler.sendEmptyMessage(0); 
        } 
       } 
      }; 
this will allow your tabhost to wait until the thread gets executed and will come into view after thread finishes execution. 
+0

好吧,thx幫助這工作 – Hello 2012-01-03 17:00:02

2

使用AsyncTask

一些提示:

public class BackgroundAsyncTask extends AsyncTask<Void, Integer, Void> { 
    int myProgress; 
    @Override 
    protected void onPostExecute(Void result) { 
    TabHost1 tab = new TabHost1(); 
    tab.tabHost.setCurrentTab(2); 
    progressBar.dismiss(); 

    } 
    @Override 
    protected Void doInBackground(Void... params) { 
     while(myProgress<100){ 
      myProgress++; 
      publishProgress(myProgress); 
      SystemClock.sleep(100); 
     } 
     return null; 
    } 

    @Override 
    protected void onProgressUpdate(Integer p) { 
     progressBar.setProgress(p); 
    } 

} 
+1

+1同意這個執行此操作。 – 2012-01-02 12:30:51

+0

主標題有誤導性。 Sry爲此。我的意思是ProgressDialog不ProgressBar。這是同樣的方式嗎? – Hello 2012-01-02 20:59:07

+0

是'ProgressDialog'是相同的,你必須實現'onPreExecute()'顯示'ProgressDialog' – 2012-01-03 04:43:35