Я работаю над приложением, которое имеет поддержку Fragment
SearchView
с виджетом и RecyclerView
представить результаты поиска, которые отправляют пользователь на FragmentActivity
, чтобы отобразить информацию о выборе. Все это прекрасно работает, но я вижу противоречивое поведение между эмулятором Nexus 6 и фактическим устройством по отношению к backstack. В эмуляторе все работает так, как я ожидал, когда пользователь будет возвращен к фрагменту результатов поиска, если нажать кнопку «Назад», а на деталях FragmentActivity. На реальной Nexus 6 устройства, пользователь берется весь путь обратно к AppCompatActivity
, который содержит меню моего приложения (это деятельность использует поддержку FragmentManager
, который добавляет фрагменты, которыми он управляет к backstack):Различного поведение backstack между Nexus 6 устройством и эмулятором
private void replaceFragment(Fragment supportFragment) {
String fragmentName = supportFragment.getClass().getSimpleName();
supportFragmentManager.beginTransaction()
.addToBackStack(fragmentName)
.replace(R.id.frame_menu_container, supportFragment, fragmentName)
.commit();
}
код для отправки пользователя из фрагмента в FragmentActivity только умысел с массовкой:
Intent intent = new Intent(getActivity(), PlayerDetailsActivity.class);
intent.putExtra(TransientPlayer.BUNDLE_KEY, transientPlayer);
startActivity(intent);
Я не делаю ничего особенного с backstack (еще) - это с поведением по умолчанию.
В чем может быть проблема? Я сделал некоторые чтения в backstack, и я еще ничего не видел, когда вручную добавлял что-то в backstack, когда вы возвращаетесь из FragmentActivy в фрагмент, где вы не используете FragmentManager.
EDIT 1: Вот макет XML, где frame_menu_container
определяется:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
<FrameLayout
android:id="@+id/frame_menu_container"
android:layout_below="@id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout="@layout/fragment_home">
</FrameLayout>
</RelativeLayout>
EDIT 2: OK, вот текстовое описание моей деятельности на высоком уровне и фрагменты:
NavigationMenuActivity
, который проходит AppCompatActivity
. Здесь все фрагменты меняются местами и при необходимости, и используется SupportFragmentManager
и где у меня есть метод replaceFragment()
.
У меня есть следующие фрагменты, все из которых отображают статическую информацию, делают вызовы REST для извлечения и отображения данных или позволяют пользователю отправлять обратную связь. Все расширение android.support.v4.app.Fragment
, и ни один из них не имеет других фрагментов или действий, к которым пользователь может перейти.
- HomeFragment
- CalendarFragment
- StandingsFragment
- PlayerSearchFragment (смотри ниже)
- AboutFragment
- FeedbackFragment
Единственное исключение в функциональности этих фрагментов является PlayerSearchFragment
, который также e xtends android.support.v4.app.Fragment
. Этот фрагмент содержит RecyclerView
, который отображает результаты вызова REST, когда пользователи хотят искать игроков. Когда результаты возвращаются и пользователь выбирает элемент из списка, они отправляются на номер PlayerDetailsActivity
, который продлевает FragmentActivity
.
PlayerDetailsActivity
использует вид FragmentTabHost
, который содержит различные виды информации о игроке, который можно просмотреть. Это «конец строки» по этому пути - нет других фрагментов или действий, к которым пользователь может перейти. Вот в чем проблема.Когда я нажимаю кнопку «Назад» во время этой операции, я хочу, чтобы пользователь вернулся к фрагменту PlayerSearchFragment
(результаты поиска), которые в этом случае выполняются, если я в эмуляторе Nexus 6 , но они вернитесь к действию NavigationMenuActivity
, если я нахожусь на своем фактическом устройстве Nexus 6 .
У меня есть следующий метод в PlayerDetailsActivity
, который вызывается при нажатии кнопки Back, но он всегда показывает нулевые записи:
@Override
public void onBackPressed() {
FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();
Log.i(TAG, "Backstack : There are " + count + " entries");
for (int i = 0; i > count; i++) {
FragmentManager.BackStackEntry backStackEntry = fragmentManager.getBackStackEntryAt(i);
Log.i(TAG, String.format("Backstack : id=%d, name=%s, shortTitle=%s, breadcrumbTitle=%s",
backStackEntry.getId(),
backStackEntry.getName(),
backStackEntry.getBreadCrumbShortTitle(),
backStackEntry.getBreadCrumbTitle()));
}
super.onBackPressed();
}
Моя надежда состоит в том, чтобы иметь опыт быть одинаковым для всех устройств, будь то аппаратное обеспечение или эмулятор.
Опубликовать макет, содержащий frame_menu_container. Я думаю, что это не может быть подходящим элементом пользовательского интерфейса для фрагмента. –
Я добавил его выше – TheIcemanCometh
Поиск - фрагментная активность? & результаты - фрагмент? почему вы используете намерения btw Извините, если im wrong – Elltz