Я понимаю, что название может звучать немного вводящим в заблуждение, но через секунду оно будет иметь смысл.
Когда возникает проблема?
* 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
...