Изменение макета через 5 секунд

#java #android

#java #Android

Вопрос:

Мое приложение запускается с показа макета, который содержит только значок моего приложения, и через 5 секунд оно должно переключиться на другой макет, который я определил как другой файл XML-макета, но когда я тестирую его на своем телефоне, отображается первый макет, и через 5 секунд приложение завершается. Ниже приведен мой код

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Timer timer;
    timer=new Timer();
    timer.schedule(new TimerTask() {
        @Override
        public void run() {
            setContentView(R.layout.signup);}  },5000);}}
  

Я использовал функцию таймера. activity_main — это XML-файл макета, содержащий только вид изображения, а sign_up — это XML-файл макета, содержащий формы регистрации.

Я видел то же самое на YouTube, но парень меняет макет после нажатия кнопки, и это сработало…. Я только изменил нажатие кнопки на таймер.

Смиренно запрашиваю ответы. Спасибо

Комментарии:

1. Вам нужно запустить setContentView в потоке пользовательского интерфейса. Вы могли бы обернуть это в runOnUiThread . Смотрите документы Android для получения дополнительной информации.

Ответ №1:

Вы можете использовать любое представление из layout activity_main для вызова postDelayed, например:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.tvHellow).postDelayed(new Runnable() {
        @Override
        public void run() {
            setContentView(R.layout.sign_up);
        }
    }, 5000);
}
  

и это работает.

Комментарии:

1. Спасибо за ответ. Что такое tvHellow?

2. это просто TextView из activity_main с id =»@id/tvHellow». вы можете использовать любое представление, которое хотите, из activity_main, потому что у любого представления уже есть собственный обработчик под капотом

Ответ №2:

вы также можете использовать обработчик, подобный этому:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Handler handler = new Handler(Looper.getMainLooper());
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
           setContentView(R.layout.signup);
        }
    }, 5000);
}
  

Комментарии:

1. вы могли бы использовать обработчик из любого существующего представления из макета

2. Спасибо за этот ответ… Он работал и смог изучить обработчик, зацикливатель и потоки