2010-02-16 76 views

回答

4

設置一個Timer以每3秒運行一次TimerTaskTimerTask只需調用按鈕的setText方法即可更改按鈕的文本。您必須在UI線程中執行此操作,因此您應該使用來運行Runnable對象,該對象將執行更新爲正確的線程。

例如,在下面的活動中,字母「A」被添加到該按鈕的文本每三秒鐘:

public class ButtonTest extends Activity { 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     Button subject = new Button(this); 
     subject.setLayoutParams((new LayoutParams(LayoutParams.WRAP_CONTENT, 
       LayoutParams.WRAP_CONTENT))); 
     subject.setText("A"); 
     setContentView(subject); 

     Timer timing = new Timer(); 
     timing.schedule(new Updater(subject), 3000, 3000); 
    } 

    private static class Updater extends TimerTask { 
     private final Button subject; 

     public Updater(Button subject) { 
      this.subject = subject; 
     } 

     @Override 
     public void run() { 
      subject.post(new Runnable() { 

       public void run() { 
        subject.setText(subject.getText() + "A"); 
       } 
      }); 
     } 
    } 
} 
+0

顯示在按鈕上的文字的細節例如但是你不能沒有一個處理程序更新UI線程。 –

+0

好吧,你從任何時候都從TimerTask中派生出來,所以在你自己的函數中傳遞一個參考 – 2010-02-16 11:21:32

+0

嗨,請提供一些示例代碼給Timmer – deepthi

0

使用AsyncTask你可以做這樣的事情更新Button名爲Button1

private class UpdateButton extends AsyncTask<Void, String, Void> { 

    @Override 
    protected Void doInBackground(Void... params) { 
     int i = 0; 
     while (true) { 
      publishProgress("" + i++); 
      try { 
       Thread.sleep(3000); 
      } catch (InterruptedException e) { 
       return (Void)null; 
      } 
     } 
    } 

    @Override 
    protected void onProgressUpdate(String... values) { 
     super.onProgressUpdate(values); 

     button1.setText(values[0]); 
    }  
} 

啓動按鈕1更新

(new UpdateButton()).execute((Void)null); 
3

看看這個整潔的小例子:http://developer.android.com/resources/articles/timed-ui-updates.html

所有你需要的是一個處理程序和一個任務!在任務中執行您的操作(設置文本)並使用Handler.postDelayed設置下一個處理程序事件。

但是要記住以下幾點:我會強烈建議您設置在活動的onResume()方法和第一計時器事件在其onCreate方法。另外,刪除(取消)您的處理程序onPause()

要理解這個的含義,看看活動的lifecycle

通過這種方式,您可以防止在您的活動處於後臺並且不可見時發生任何事情!

+1

非常感謝 – deepthi

1

@deepthi:這裏是在特定的時間間隔

import android.app.Activity; 
import android.os.Bundle; 
import android.os.Handler; 
import android.widget.Button; 
import android.widget.ImageView; 

public class ButtonActivity extends Activity { 

private static final long GET_DATA_INTERVAL = 2000; 
int images[] = {R.drawable.kanya,R.drawable.kumba}; 
private String[] textfirst={"nsc","bsc","nasadq","tcs","mds","mac","manipal"}; 

int index = 0; 
ImageView img; 
Button btn; 
Handler hand = new Handler(); 
Handler hand1 = new Handler(); 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    this.setContentView(R.layout.main); 
    img = (ImageView) findViewById(R.id.image); 
    btn = (Button) findViewById(R.id.button1); 
    hand1.postDelayed(run1, GET_DATA_INTERVAL);  
} 

Runnable run1 = new Runnable() { 
    @Override 
    public void run() { 
     btn.setText(textfirst[index++]); 
     if (index == textfirst.length) 
      index = 0; 
     hand1.postDelayed(run1, GET_DATA_INTERVAL); 
    } 
}; 
相關問題