我想從Android應用程序中的異步任務更新TextView
。用Handler
做這件事最簡單的方法是什麼?如何使用Android Handler更新UI線程中的TextView?
還有一些類似的問題,例如:Android update TextView with Handler,但該示例很複雜,似乎沒有回答。
我想從Android應用程序中的異步任務更新TextView
。用Handler
做這件事最簡單的方法是什麼?如何使用Android Handler更新UI線程中的TextView?
還有一些類似的問題,例如:Android update TextView with Handler,但該示例很複雜,似乎沒有回答。
有幾種方法可以更新您的用戶界面,並從UI線程之外修改View
,如TextView
。 A Handler
只是一種方法。
下面是一個示例,它允許單個Handler
響應各種類型的請求。
在類級別定義一個簡單Handler
:
private final static int DO_UPDATE_TEXT = 0;
private final static int DO_THAT = 1;
private final Handler myHandler = new Handler() {
public void handleMessage(Message msg) {
final int what = msg.what;
switch(what) {
case DO_UPDATE_TEXT: doUpdate(); break;
case DO_THAT: doThat(); break;
}
}
};
更新在你的函數,這是現在在UI線程一個用戶界面:
private void doUpdate() {
myTextView.setText("I've been updated.");
}
從你的異步任務中,發送訊息給Handler
。有幾種方法可以做到這一點。這可能是最簡單的:
myHandler.sendEmptyMessage(DO_UPDATE_TEXT);
您也可以通過這種方式也更新從後臺線程UI線程:
Handler handler = new Handler(); // write in onCreate function
//below piece of code is written in function of class that extends from AsyncTask
handler.post(new Runnable() {
@Override
public void run() {
textView.setText(stringBuilder);
}
});
什麼'Handler類應該是靜態的,否則內存泄漏可能occur'警告? – nmxprime
請找到[** Blog post **](http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html)和這個答案(http://stackoverflow.com/questions/11407943/this-handler-class-should-be-static-or-leaks-might-occurrence-incominghandler)以獲得更多關於此的信息 –
我建議在這裏使用weakHandler來避免泄漏。 https://github.com/badoo/android-weak-handler – j2emanue