2014-04-06 28 views
0

我activity_main.xml中包含此進度,啓動隱藏的(「水漲船高」)更改進度可視性裏面的onClick

<ProgressBar 
     android:id="@+id/progressBar_sendingPhoneNumber" 
     style="?android:attr/progressBarStyleLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_below="@id/button_sendPhoneNumber" 
     android:layout_centerInParent="true" 
     android:visibility="gone" /> 

而且我MainActivity.java有這個,
一個onclick處理程序的按鈕,我有

final Context context = this; 

    sendPhoneNumberButton.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 

      ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_sendingPhoneNumber); 
      progressBar.setVisibility(View.VISIBLE); 

      // Simulate HTTP connection 
      try { 
       Thread.sleep(3000); 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      progressBar.setVisibility(View.GONE); 

      // Redirect to new activity 
      Intent intent = new Intent(context, InboxActivity.class); 
      startActivity(intent); 
     } 
    }); 

的問題是,從未示出的進度條,雖然執行的onClick代碼(例如,它在端重定向到新的活動)。所以行:

progressBar.setVisibility(View.VISIBLE); 

沒有生效。

我認爲這與上下文有關,並嘗試從「外部」活動更改progressBar的可見性,但我不確定。

我該如何解決這個問題?

+0

它與你正在使用的'Context'沒有任何關係。你阻止UI「線程」三秒鐘。 – adneal

回答

2

這是從來沒有顯示,因爲您所呼叫

try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 

,使「睡眠」線程負責繪製你想顯示

+0

但這段代碼是將知名度更改爲「可見」 – sports

+1

我知道。但是你必須等待下一個draw()被執行。這將在未來某個時候發生。 – Blackbelt

3

UI線程調用Thread.sleep(3000);將阻止相同ProgressBar UI線程。你不應該阻止UI線程。

http://developer.android.com/training/articles/perf-anr.html

如果要實現線程或HandlerThread,確保在等待工作線程的UI線程 不會阻止完成,不 調用Thread.wait()和Thread.sleep ()

此外,您還可以移動這樣的:

ProgressBar progressBar = (ProgressBar) findViewById(R.id.progressBar_sendingPhoneNumber); 

出局ide View.onClick。無需每次點擊Button即可初始化視圖。

+0

儘管進度條永遠不會顯示 – Blackbelt

+0

@blackbelt編輯。 – Raghunandan

+1

我的意思是,如果他在xml中將可見性屬性置於不可見或消失的值,則是相同的。 – Blackbelt