いくつかのタスクが完了した後にTextViewのテキストを別のスレッドから変更しようとしている場合は、Handlerを使用する必要があります。そうしないと、奇妙なエラーが発生する可能性があります。
EditText input;
Thread myWorkerThread;
AlertDialog alertDialog;
Handler successHandler = new Handler()
{
@Override
public void handleMessage(Message message)
{
setText("Success Message");
}
};
public void setText(String url)
{
input.setText("http://xxxx/" + url);
input.invalidate();
input.selectAll();
}
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
input = new EditText(this);
myWorkerThread = new Thread()
{
public void run()
{
// do your tasks here
// after task is done, call the handler
successHandler.sendEmptyMessage(0);
}
};
}
myWokerThreadを開始する前に、alertdialogを表示してください。
alertDialog = new AlertDialog.Builder(MyActivity.this).create();
alertDialog.setTitle("Title");
alertDialog.setMessage("Message");
alertDialog.setView(input, 10, 0, 10, 0); // 10 spacing, left and right
alertDialog.show();
myWorkerThread.start();