2011-12-18 2 views
4

В моем основном действии я хотел бы настроить его, чтобы я сначала познакомился с contentview, просто показывая фон и некоторый текст. Через X секунд я хочу, чтобы я изменил свое другое представление (GLSurfaceView).Что действительно делает «setContentView»?

Это, очевидно, то, что я делаю совершенно неправильно.

Это, как я уже предполагал, что это, возможно, было сделано (Это все в OnCreate)

setContentView(R.layout.main); 

    try { 
     Thread.sleep(10000); 
    } catch (InterruptedException e) { 
    } 

    viewer = new Viewer(this); 

    setContentView(viewer); 

Где расположение Main, хочет я хочу показать в начале и просмотр моего класс GLSurfaceView.

Что происходит, так это то, что он просто черным в течение 10 секунд, а затем он начинает загружать мои объекты, которые у меня есть, что показано через OpenGL (ES).

Нет ничего плохого в макете «main», так как он работает, если я просто стираю линии под тем местом, где спит поток принимает меры. Тхо ничего не происходит до того, как Thread.sleep закончится ...

С учетом сказанного, Мои вопросы следующие

  • Почему это contentView не меняется до после Thread.sleep делается?
  • Что было бы подходящим решением для того, что я хочу достичь?

ответ

8

Я предполагаю это в вашем onCreate(), и поэтому вы ничего не видите.

Способ, которым я бы это реализовал, - начать поток, используя спящий режим AsyncTask в doInBackground, а в onPostExecute - создать новый вид.

0

Кажется, что вы делаете основной поток сна. Это может быть причиной того, что код работает после.

2

Не делайте сон основной резьбой (резьба UI). Используйте вместо этого threads, AsynkTas k или TimerTask.

0

Похоже, вы хотите что-то вроде заставки. Мне нравится думать об этом как отдельном для следующего экрана, поэтому всегда используйте отдельную деятельность, а не дважды вызывайте setContentView. Вам все равно нужно спать в потоке.

Просто личные предпочтения, хотя ...

2

Ты не спишь нить UI в том, как вы думаете, что вы есть.

Простейшая вещь, которую вы хотите достичь, - это разделить взгляды на отдельные действия и позволить Android обрабатывать переход между представлениями. Он добавляет еще один файл в вашу кодовую базу, но это довольно просто. Предположим, что ваш начальный, простой вид (R.layout.main) предназначен для деятельности SplashActivity, и ваш пост-всплеск выглядит в PostSplashActivity.Тогда вы могли бы сделать что-то вроде этого:

public class SplashActivity extends Activity { 
    private static long DELAY = 10000; //milliseconds; 

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

    new Handler().postDelayed(
      new Runnable() { 
       @Override 
       public void run() { 
        Intent postSplash = new Intent(SplashActivity.this, PostSplashActivity.class); 
        SplashActivity.this.startActivity(postSplash); 
        SplashActivity.this.finish(); 
       } 
      }, DELAY); 
    } 
} 

Это привлечет ваше R.layout.main макет, а затем помещает startActivity вызов для вашего PostSplashActivity на очереди сообщений и говорит очереди ждать DELAY миллисекунд, чтобы выполнить его.

Смежные вопросы