#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. Спасибо за этот ответ… Он работал и смог изучить обработчик, зацикливатель и потоки