Помогите с порядком событий на странице загрузки приложения Android - PullRequest
1 голос
/ 09 июня 2011

Я изучаю Android (по иронии судьбы из кросса сайта для разработчиков из Google и SO), и у меня возникли проблемы с ранним шагом.Порядок событий, к которым я иду: 1. Загрузите всплывающую страницу 2. Через 5 секунд (это временно ... в конечном итоге будет фактически использовано для покрытия времени загрузки), переключитесь на основной вид 3. На загрузке основного вида, всплывающее окно (в настоящее время alertDialog), которое дает пользователю две опции нажатия кнопки

У меня все это работает, за исключением одной проблемы.Придирчивое окно появляется сразу же, когда появляется всплывающая страница (при запуске приложения).Вы можете видеть, что под всплывающим окном нормально работает заставка, она ждет 5 секунд, а затем переключается на главную.Может кто-нибудь сказать мне, что я делаю неправильно, пытаясь заставить всплывающее окно НЕ всплывать, пока счетчик заставок не будет сделан?Главная страница Java вставлена ​​ниже:

public class MyProject extends Activity {

    protected Dialog mSplashDialog;
    private static final int NAG_BOX = 0;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MyStateSaver data = (MyStateSaver) getLastNonConfigurationInstance();
        if (data != null) {
            // Show splash screen if still loading
            if (data.showSplashScreen) {
                showSplashScreen();
            }
            setContentView(R.layout.main);    
            showDialog(NAG_BOX);

            // Rebuild your UI with your saved state here
        } else {
            showSplashScreen();
            setContentView(R.layout.main);
            // Do your heavy loading here

        }
    }

    @Override
    public Object onRetainNonConfigurationInstance() {
        MyStateSaver data = new MyStateSaver();
        // Save your important data here

        if (mSplashDialog != null) {
            data.showSplashScreen = true;
            removeSplashScreen();
        }
        return data;
    }

    /**
     * Removes the Dialog that displays the splash screen
     */
    protected void removeSplashScreen() {
        if (mSplashDialog != null) {
            mSplashDialog.dismiss();
            mSplashDialog = null;
        }
    }

    /**
     * Shows the splash screen over the full Activity
     */
    protected void showSplashScreen() {
        mSplashDialog = new Dialog(this, R.style.SplashScreen);
        mSplashDialog.setContentView(R.layout.splash);
        mSplashDialog.setCancelable(false);
        mSplashDialog.show();

        // Set Runnable to remove splash screen just in case
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
          @Override
          public void run() {
            removeSplashScreen();
          }
        }, 5000);
    }

    /**
     * Simple class for storing important data across config changes
     */
    private class MyStateSaver {
        public boolean showSplashScreen = false;
        // Your other important fields here
    }

     @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {

            case NAG_BOX:
                // This example shows how to add a custom layout to an AlertDialog
                LayoutInflater factory = LayoutInflater.from(this);
                final View textEntryView = factory.inflate(R.layout.nagbox, null);
                return new AlertDialog.Builder(MyProject.this)
                    .setView(textEntryView)
                    .setNegativeButton("Maybe Later", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {
                           dismissDialog(NAG_BOX);
                        }
                    })
                    .setPositiveButton("Go To Site", new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int whichButton) {

                            Uri url = Uri.parse("http://www.google.com");
                            Intent intent = new Intent(Intent.ACTION_VIEW, url);
                            startActivity(intent);
                        }
                    })

                    .create();
            }
            return null;
        }
}

Ответы [ 3 ]

0 голосов
/ 09 июня 2011

Почему бы не вызвать showDialog (NAG_BOX) после закрытия заставки?

protected void removeSplashScreen() {
    if (mSplashDialog != null) {
        mSplashDialog.dismiss();
        mSplashDialog = null;
        showDialog(NAG_BOX);
    }
}
0 голосов
/ 09 июня 2011

Предпочтительным методом является использование AsyncTask для длительных операций. Вы можете использовать метод publishProgress (), чтобы обновить заставку для отображения прогресса. Это также создаст хорошую заглушку для вашего фальшивого времени ожидания.

Затем в OnPostExecute () AsyncTask вы можете показать свой диалог.

http://developer.android.com/reference/android/os/AsyncTask.html

0 голосов
/ 09 июня 2011
if (data != null) {
    // Show splash screen if still loading
    if (data.showSplashScreen) {
        showSplashScreen();
    }
    setContentView(R.layout.main);    
    showDialog(NAG_BOX);

В этой части вашего кода ваш вклад, если, хотя и показывает ваш экран-заставку, не означает, что он не будет отображать NAG_BOX

Вам нужно условие около showDialog(NAG_BOX), которое вызывается послеФункция showSplashSreen ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...