Intereting Posts
Java.lang.RuntimeException: Невозможно создать экземпляр приложения android.app.Application: java.lang.NullPointerException при LoadedApk.makeApplication ActionBarSherlock – пользовательский фон из панели действий с разделителем Когда вызывается onSizeChanged ()? Динамически сгенерированная линия с эффектом свечения Должен ли мы действительно называть getLoaderManager (). InitLoader в onActivityCreated, что приводит к тому, что onLoadFinished вызывается дважды Как играть. Video4 видео в видео в андроид? Как запустить приложение Android из командной строки? Android Studio «Структура проекта» не подходит должным образом Играть в YouTube в WebView TextView добавление градиента AND shadow Xamarin.Forms салфетки распознавания жестов Как изменяется доступ к хранилищу на Android 6? Не удается вызвать метод notifyItemInserted в обратном вызове scroll recyclerview-v7: 24.2.0 Создание и установка SSL-сертификатов Кордова: Android SDK не найден. Убедитесь, что он установлен. Если он не находится по умолчанию, установите переменную среды ANDROID_HOME

Кнопка возврата ActionBarActivity не выскочит из задней части

Я использую этот шаблон https://github.com/kanytu/android-material-drawer-template, чтобы испытать material design поэтому я реализовал несколько фрагментов, некоторые из которых имеют веб-просмотры, которых нет.

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

 getFragmentManager().beginTransaction().replace(R.id.container, new FAQ()).addToBackStack("FAQ").commit(); 

Но когда я нажимаю кнопку «Назад», он просто закрывает приложение.

Когда я меняю его на использование Activity вместо ActionBarActivity навигация работает отлично, но я теряю некоторые другие функции.

На задней кнопке есть переопределение

 @Override public void onBackPressed() { if (mNavigationDrawerFragment.isDrawerOpen()) mNavigationDrawerFragment.closeDrawer(); else super.onBackPressed(); } 

Но даже если это удалено, это все еще происходит. Я думаю, что проблема лежит где-то в super.onBackPressed

Есть ли причина, по которой ActionBarActivity нарушит кнопку «Назад»?

Solutions Collecting From Web of "Кнопка возврата ActionBarActivity не выскочит из задней части"

Я недавно прочитал сообщение об этом, извините, я больше не могу его найти … Но в основном, он объяснил, что основная функция кнопки «Назад» – завершить текущую Activity .

Фактически, согласно официальной документации onBackPressed() :

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

И казалось бы, что даже если кнопка «назад» использовалась для загрузки backstack до 5.0, Google изменил бы это поведение на новый ActionBarActivity .

Со своей стороны, я использовал некоторый workarround, который работает для меня, но это может не сработать для всех, в зависимости от вашей реализации навигации.

Но в случае, если это может быть полезно кому-то, вот оно:

 @Override public void onBackPressed() { if (mDrawerLayout.isDrawerOpen()) { mDrawerLayout.closeDrawer(); } else if (getFragmentManager().getBackStackEntryCount() > 0) { getFragmentManager().popBackStack(); } else { super.onBackPressed(); } } 

Таким образом, ActionBarActivity.onBackPressed() вызывается только тогда, когда стопка backstack пуста, и в этом случае она уничтожает ActionBarActivity .

Вы должны проверить, что «getFragmentManager» и «getSupportFragmentManager» соответствуют вашей активности и действиям или нет.

Потому что, в действии:

 public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } } 

В FragmentActivity:

 public void onBackPressed() { if (!mFragments.popBackStackImmediate()) { finish(); } } 

Мы можем видеть тот же код, который уже обрабатывал backstatck поп-фрагмента. В моей ситуации я использовал actionbaractivity (extends FragmentAcvitiy), но я также использовал «getFragmentManager», поэтому я получил ту же ошибку, что и вы. После того, как я заменил «getFragmentManager» на «getSupportFragmentManager», все в порядке! Вы также можете заменить «actionbaractiviy» на «Activity», чтобы исправить эту проблему.

Необходимо убедиться, что «getFragmentManager» соответствует «Activity», «getSupportFragmentManager» соответствует «FragmentActivity (ActionbarActivity)».

Если вы хотите добавить панель действий на уровне API 11 или выше, вы можете увидеть ниже:

https://developer.android.com/guide/topics/ui/actionbar.html#Adding

На уровне API 11 или выше Панель действий включена во все действия, в которых используется тема Theme.Holo (или один из его потомков), который является темой по умолчанию, когда либо атрибуту targetSdkVersion, либо атрибуту minSdkVersion установлено значение «11» или выше. Если вам не нужна панель действий для активности, установите тему активности в Theme.Holo.NoActionBar.