明確にするために、この質問はThread から TextView を更新する方法に関するものではなく、正常に機能しています。問題は、スレッド全体で TextView を更新するために複数の呼び出しを行っても、スレッドが完了した後にのみ更新が表示されることです。次に例を示します。
public class NDThread extends Thread { 保護された LogActionListener log_listener; プライベート ハンドラー ハンドラー = 新しい Handler(); public void run() { logAction("開始"); // 多くのことを行う.. logAction("途中"); // 他にもいろいろ.. logAction("完了"); } パブリック インターフェイス LogActionListener { public void onLogAction(String paramString); } public void logAction(最終文字列 str) { if(log_listener != null) handler.post(new Runnable() { @オーバーライド public void run() { log_listener.onLogAction(文字列); } }); } }
メインのアクティビティではLogActionListener
、文字列を受け取り、TextView を更新するように実装します。
NDThread スレッド = 新しい NDThread(); thread.setOnLogActionListener(これ); スレッド.run(); // 他の場所.. @オーバーライド public void onLogAction(最終文字列メッセージ) { handler.post(新しい Runnable() { @オーバーライド public void run() { textView.append(msg); } }); }
ご覧のとおりHandler
、スレッドとアクティビティの両方で s を使用しました。どちらを使用するのが正しいかよくわからなかったからです。ただし、結果は常にスレッド全体の空の TextView になり、最後に 3 行が出力されます。私は何を間違っていますか?