2009-05-23 10 views
24

私はカスタムタイトルビューを使用しており、スレッドが動作しているときにタイトルバーにプログレスバーを表示/非表示したいと考えています。Android - runOnUiThreadを使用してスレッドからUIを変更する

これは私のタイトルビューのXML私の活動に

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
> 
    <Button 
     android:id="@+id/image_left_btn" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:text="Back" 
    /> 
    <TextView 
     android:id="@+id/image_title_text" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:textSize="20dip" 
     android:textStyle="bold" 
     android:textColor="#fff" 
     android:layout_gravity="center" 
     android:gravity="center" 
     android:paddingLeft="8dip" 
     android:paddingRight="8dip" 
    /> 
    <ProgressBar 
     android:id="@+android:id/progress_small_title" 
     style="?android:attr/progressBarStyleSmall" 
     android:layout_width="75dip" 
     android:layout_height="wrap_content" 
     android:paddingRight="8dip"/> 
</LinearLayout> 

で、カスタムタイトルバーとしてこれを設定した後、私はtitleProgressは、プログレスバーオブジェクトである。この

titleProgress = (ProgressBar)findViewById(R.id.progress_small_title); 
titleProgress.setVisibility(View.INVISIBLE); 

を行います。

これは私が私のスレッドで何をすべきか

runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.VISIBLE); 
    } 
}); 
//long operation here 
runOnUiThread(new Runnable() { 
    public void run() { 
     titleProgress.setVisibility(View.INVISIBLE); 
    } 
}); 

である。しかし、プログレスバーへの変更はありません。それは表示されません。誰かがコードに間違っていることを教えてもらえますか?

タイトルのプログレスバーをカスタムタイトルに表示することはできますか?

ありがとうございました。

答えて

16

いくつかのことを参照してください:

1)(これは、おそらくそれはない)ことを確認し、 "titleProgressは" 揮発性です。

2)数えてpostInvalidate()またはtitleProgress.postInvalidate()を数回投げて再描画をトリガーしてください。

3)巨大な緑色のロボットに似たような形でx486マシンをsacraficedしましたか? (ちょうど冗談)

最初の2人(もしあなたが本当に必死ならば、3人目)がどこにいても教えてください。

+3

既に最初の2つを試しましたが、助けにはなりませんでした!そして私は必死で私は3のための呼び出しを推測する? ;) – lostInTransit

+0

3)オプションは、すべての問題に最適なソリューションです... LOL – Rodrigo

0

は。水平にプログレスバーのスタイルを変更してみてください:

style="?android:attr/progressBarStyleHorizontal" 

style="?android:attr/progressBarStyleSmall" 

は完全にタイトルバーで見ることができない、円形の「プログレスバー」を与えます。

+0

デフォルトのタイトルバーに収まるはずのprogressBarStyleSmallTitleで試したこともあります。これは表示されません。 – lostInTransit

1

レイアウトは正しいですか?最初に縦型レイアウトで作業するようにしましたか?アクティビティを開始するときに進行状況バーが表示されているかどうかを確認するだけですか?ハンドラと

4

利用コミュニケーション、

  1. run()にあなたのスレッド
  2. を実行:あなたは(当然の水平)プログレスバーを更新するどのハンドラにメッセージを送信する必要がありますあなたの中handler.sendMessage(handler.obtainMessage());
  3. をアクティビティ、メソッドhandleMessage(Message msg)をオーバーライドする必要があります。このように

    handler = new Handler(){ 
        @override 
        public void handleMessage(Message msg) 
        { 
        //here you write the code which will update your progressBar 
        } 
    }; 
    
+0

これは、あなたのスレッドがあなたのアクティビティクラスにラップされている場合にのみ機能します。 – Miky

関連する問題