Android тостов иногда не отображаются при первом запуске приложения - PullRequest
1 голос
/ 03 марта 2020

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

Когда возникает проблема?
* toasts отображается всегда, но не в первый раз, когда пользователь запускает приложение. Когда приложение запускается в первый раз, отображается представление приложения. В моем MainActivity я проверяю свой SharedPreferences и запускаю Intent, который содержит AppIntro, когда пользователь посещает приложение в первый раз.

Я показываю быстрое вступление, а также спрашиваю пользователя о Storage Permission Затем отображается мой SearchFragment в соответствующем ViewPager.

Когда и где запускаются тосты?
Когда пользователь нажимает кнопку, я вызываю метод showInfoToast(), где я передаю Context и String как аргумент, а затем мои тосты показываются. Я использую библиотеку Toasty от GrenderG, но это не имеет никакого значения для стандартного тоста.

public static void showInfoToast(String infoMessage, Context context) {
    Toasty.info(context, infoMessage, Toast.LENGTH_SHORT, true).show();
}

Что я пробовал / в чем проблема?

  • Контекст, переданный методу. Как уже говорилось, я вызываю метод showInfoToast в моем onClickListener в SearchFragment, я передаю getContext() Но, похоже, проблема не в этом, как я уже видел, когда я перешагнул через него с помощью отладчика, Context - из MainActivity.
  • Библиотека Toasty, но та же ошибка возникает в тостах по умолчанию

Вот почему, по моему мнению, приложение Intro Intent испортило контекст / SearchFragment, в котором проблема чтобы быть там, как это происходит только при первом запуске приложения.

Фрагмент кода onClickListener во фрагменте поиска:

goViralButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            synchronized (this) {
                 showInfoToast("Please add users", getContext());
            }
        }
    });

Код Введение фрагмента приложения, запускаемое MainActivity:

//  Initialize SharedPreferences
    SharedPreferences getPrefs = PreferenceManager
            .getDefaultSharedPreferences(getBaseContext());

    //  Create a new boolean and preference and set it to true
    boolean isFirstStart = getPrefs.getBoolean("firstStart", true);

    //  If the activity has never started before...
    if (isFirstStart) {

        //  Launch app intro
        final Intent i = new Intent(MainActivity.this, IntroActivity.class);

        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                startActivity(i);
            }
        });

        //  Make a new preferences editor
        SharedPreferences.Editor e = getPrefs.edit();

        //  Edit preference to make it false because we don't want this to run again
        e.putBoolean("firstStart", false);

        //  Apply changes
        e.apply();
    }

Выход Logcat при нажатии кнопки goViral:

Unable to start animation, surface is null or no children.
Toast already killed
...
...