私はTextViewを持っています。ボタンをクリックしてから1秒後にテキストを更新(「1」を追加)したい。
public class HaikuDisplay extends Activity {
Method m;
Timer t;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t = new Timer();
m = HaikuDisplay.class.getMethod("change");
}
//Event handler of the button
public void onRefresh(View view)
{
//To have the reference of this inside the TimerTask
final HaikuDisplay hd = this;
TimerTask task1 = new TimerTask(){
public void run(){
/*
* I tried to update the text here but since this is not the UI thread, it does not allow to do so.
*/
//Calls change() method
m.invoke(hd, (Object[])null);
}
};
t.schedule(task1, 1000);
}
public void change()
{
//Appends a "1" to the TextView
TextView t = (TextView)findViewById(R.id.textView1);
t.setText(t.getText() + "1");
}
//Event handler of another button which updates the text directly by appending "2".
//This works fine unless I click the first button.
public void onRefresh1(View view)
{
TextView t = (TextView)findViewById(R.id.textView1);
t.setText(t.getText() + "2");
}
}
すべての例外が処理されることを考慮してください。
最初のクリックで、m.invoke
を与えInvocationTargetException
ます。change()
ただし、例外なしで連続して呼び出されたときにメソッドを呼び出します(ロギングによって確認されます)。ただし、テキストは更新されません。私はどこが間違っていますか?
また、ボタンをクリックするたびに新しいスレッドが作成されることがデバッガーで確認できます。それは結構です。しかし、実行が完了したのに、なぜ以前のスレッドを削除しないのでしょうか。