2011-09-28 33 views
0

我將一個類子類化爲Button並覆蓋onDraw()方法。並且在類的構造函數中寫了一個處理程序,我正在更新其值必須更新爲該按鈕文本的變量。下面是代碼片段,這導致自定義按鈕文本更新UI線程(或)Android中的onDraw

public class CustomButton extends Button{ 



     CustomButton(){ 
       handler = new Handler(); 
       Runnable runObj = new Runnable(){ 
        public void run(){ 
         counter++; 
         handler.postDelayed(this,1000);     
        } 
       }; 
       handler.post(runObj); 
     } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas);  
     setBackgroundResource(R.drawable.button9patch);  
     setTextColor(COMPONENTTEXTCOLOR); 
     setText(counter);  
    } 

    } 

那麼按鈕文本得到更新。我知道onDraw()方法在最初呈現按鈕時以及我們對按鈕視圖進行一些修改(如設置標籤或圖像等)時會被調用。

在我的代碼中,我正在更新onDraw()方法以外的計數器,但是顯式地從onDraw()方法調用setText(counter)。因爲我沒有從Hanlder代碼中調用setText(counter)它如何定期更新按鈕文本?

是否導致計數器變量更改的UI線程定期更新爲按鈕?

我很困惑。

謝謝

+0

請更新您的問題格式。底部的文本很難以這種方式閱讀。 – Knickedi

回答

1

你從來沒有第一次啓動處理程序。

handler.postDelayed(runObj,1000);   

更新:

每次更新,你必須強制按鈕重繪自身計數器:

counter++; 
CustomButton.this.postInvalidate(); 
+0

感謝您的編輯和答覆。其實我試圖用示例代碼來解釋我的問題。我忘了加急它:-)。我現在加了它。 – droidsites

+0

但這個更改沒有回答我的問題 – droidsites

+0

更新了答案 –