Пример довольно прост: я хочу, чтобы пользователь знал о том, что делает приложение, просто показывая текст (canvas.drawText ()). Затем появляется мое первое сообщение, но не другие. Я имею в виду, у меня есть метод "setText", но он не обновляется.
onCreate(Bundle bundle) {
super.onCreate(bundle);
setContentView(splash); // splash is the view class
loadResources();
splash.setText("this");
boundWebService();
splash.setText("that"):
etc();
splash.setText("so on");
}
Рисование текста в представлении работает, просто используя drawText в onDraw (); таким образом, setText изменяет текст, но не показывает его.
Кто-то порекомендовал мне заменить представление на SurfaceView, но было бы много проблем всего за пару обновлений, ТАК ... как, черт возьми, я могу динамически обновлять представление во время выполнения?
Это должно быть довольно просто, просто показывать текст, скажем, 2 секунды, а затем основной поток выполняет свои действия, а затем обновляет текст ...
Спасибо!
Обновление:
Я пытался реализовать handler.onPost (), но снова и снова та же история. Позвольте мне поставить вам код:
public class ThreadViewTestActivity extends Activity {
Thread t;
Splash splash;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
splash = new Splash(this);
t = new Thread(splash);
t.start();
splash.setTextow("OA");
try { Thread.sleep(4000); } catch (InterruptedException e) { }
splash.setTextow("LALA");
}
}
И
public class Splash implements Runnable {
Activity activity;
final Handler myHandler = new Handler();
public Splash(Activity activity) {
this.activity=activity;
}
@Override
public void run() {
// TODO Auto-generated method stub
}
public synchronized void setTextow(final String textow) {
// Wrap DownloadTask into another Runnable to track the statistics
myHandler.post(new Runnable() {
@Override
public void run() {
TextView t = (TextView)activity.findViewById(R.id.testo);
t.setText(textow);
t.invalidate();
}
});
}
}
Хотя splash находится в другом потоке, я помещаю спящий режим в основной поток, я использую обработчик для управления пользовательским интерфейсом и всем остальным, он ничего не меняет, он показывает только последнее обновление.