Активность игнорирует показ тостов при исполнении из моей темы - PullRequest
1 голос
/ 27 марта 2011

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

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();
            }

        }

    }

}

1 Ответ

1 голос
/ 27 марта 2011
  1. Вы не должны звонить Looper.prepare.Вы получили исключение, потому что делали что-то не так:
  2. Тосты являются частью инструментария пользовательского интерфейса, и поэтому должны быть доступны из потока пользовательского интерфейса - поэтому вы получаете исключение
  3. Я предлагаю вам поменять Thread на AsyncTask и использовать метод onProgressUpdate для создания тостов, поскольку он автоматически запускается в потоке пользовательского интерфейса.В противном случае вам нужно будет использовать обработчик.
  4. Передать контекст из getBaseContext, а не контекст из текущего действия в ваш конструктор
...