In the Android book for developers 3rd edition, authors Paul Deitel, Harvey Deitel, Alexander Wald, have an example in which DialogFragment is an anonymous inner class. Android Studio displays the message "Fragments should not be static". There was a question - in the android API, there have been some changes, and it is no longer possible to use fragments as anonymous classes? Or were there mistakes in the book? The book covers API23, AS API27
private OnClickListener guessButtonListener = new OnClickListener() { @Override public void onClick(View v) { Button guessButton = ((Button) v); String guess = guessButton.getText().toString(); String answer = getCountryName(correctAnswer); ++totalGuesses; // Увеличение количества попыток пользователя if (guess.equals(answer)) { // Если ответ правилен ++correctAnswers; // Увеличить количество правильных ответов // Правильный ответ выводится зеленым цветом answerTextView.setText(answer + "!"); answerTextView.setTextColor( getResources().getColor(R.color.correct_answer, getContext().getTheme())); disableButtons(); // Блокировка всех кнопок ответов // Если пользователь правильно угадал FLAGS_IN_QUIZ флагов if (correctAnswers == FLAGS_IN_QUIZ) { // DialogFragment для вывода статистики и перезапуска DialogFragment quizResults = new DialogFragment() { // Создание окна AlertDialog @Override public Dialog onCreateDialog(Bundle bundle) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage( getString(R.string.results, totalGuesses, (1000 / (double) totalGuesses))); // Кнопка сброса "Reset Quiz" builder.setPositiveButton(R.string.reset_quiz, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { resetQuiz(); } } ); return builder.create(); // Вернуть AlertDialog } }; // Использование FragmentManager для вывода DialogFragment quizResults.setCancelable(false); quizResults.show(getFragmentManager(), "quiz results"); } else { // Ответ правильный, но викторина не закончена // Загрузка следующего флага после двухсекундной задержки handler.postDelayed( new Runnable() { @Override public void run() { animate(true); // Анимация исчезновения флага } }, 2000); // 2000 миллисекунд для двухсекундной задержки } } else { // Неправильный ответ flagImageView.startAnimation(shakeAnimation); // Встряхивание // Сообщение "Incorrect!" выводится красным шрифтом answerTextView.setText(R.string.incorrect_answer); answerTextView.setTextColor(getResources().getColor( R.color.incorrect_answer, getContext().getTheme())); guessButton.setEnabled(false); // Блокировка неправильного ответа } } };