Активность игнорирует показ тостов при исполнении из моей темы

1

Почему я вижу только "первый" тост, а не другие (должен быть) из моего потока?

public class BannerExample extends Activity {

    @Override
    public void onCreate(final Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        Toast toast = Toast.makeText(this, "first toast", Toast.LENGTH_SHORT);
        toast.show();

        new MyThread(this).start();

    }

    class MyThread extends Thread {

        private Context context;

        public MyThread(Context context) {
            this.context = context;
        }

        public void run() {

            Looper.prepare(); // An exception told me to add this - i have no clue why

            for (int i = 0; i < 3; i++) {

                try {
                    sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

                Toast toast = Toast.makeText(context, i + "whoho", Toast.LENGTH_SHORT);
                toast.show();
            }

        }

    }

}
Теги:
multithreading
toast

1 ответ

1
Лучший ответ
  • Вы не должны называть Looper.prepare. Вы получали исключение, потому что вы делали что-то не так:
  • Тосты являются частью набора инструментов пользовательского интерфейса и поэтому должны быть доступны из потока пользовательского интерфейса - вот почему вы получали исключение
  • Я предлагаю вам обмен Thread на AsyncTask и использовать метод onProgressUpdate для создания ваших тостов, поскольку это автоматически запускается в потоке пользовательского интерфейса. В противном случае вам нужно будет использовать обработчик.
  • Передайте контекст из getBaseContext, а не контекст из текущей активности в ваш конструктор
  • 0
    Круто, спасибо!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню