Мой текущий Android приложение имеет два фрагмента: -Как правильно показать/скрыть фрагмент Android?
ListFragment
Detailfragment
Мой Компоновка XML напоминает: -
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_anchorGravity="bottom"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</FrameLayout>
отобразилась ListFragment первый следующим образом: -
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(containerId, mListFragment, LIST_FRAGMENT_TAG);
if (mLandscape) {
} else {
fragmentTransaction.addToBackStack(LIST_FRAGMENT_TAG);
}
fragmentTransaction.commit();
Когда пользователь клики на элементе списка, я хочу скрыть список, чтобы сохранить текущую позицию в списке и т. д. и отобразить detailFragment.
Heres код я использую, чтобы выполнить это изменение пользовательского интерфейса: -
mDetailFragment = new DetailFragment();
final Bundle fragmentArguments = new Bundle();
fragmentArguments.putString(ITEM_KEY, item.getKey());
mDetailFragment.setArguments(fragmentArguments);
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
if (mLandscape) {
fragmentTransaction.replace(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG);
} else {
fragmentTransaction.hide(mListFragment);
fragmentTransaction.add(containerId, mDetailFragment, DETAIL_FRAGMENT_TAG);
}
fragmentTransaction.commit();
Приведенный выше код все работает отлично, и я могу перейти между списком и Detail Фрагменты успешно.
Проблема заключается в том, что, когда пользователь нажимает кнопку BACK BUTTON на фрагменте детали, чтобы вернуться в список, они возвращаются на пустой экран.
У меня есть этот код в моей деятельности, чтобы удалить фрагмент детали и показать фрагмент скрытого списка: -
@Override
public void onBackPressed() {
if (mLandscape) {
} else {
if (mListFragment.isHidden()) {
final FragmentManager fragmentManager = getFragmentManager();
final FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(mDetailFragment);
fragmentTransaction.show(mListFragment);
fragmentTransaction.commit();
}
}
super.onBackPressed();
}
Почему fragmentTransaction.show(mListFragment);
не показывать скрытое ListFragment?
ПРИМЕЧАНИЕ: Так что я всегда перестраивать свой пользовательский интерфейс полностью на изменения ориентации я прошел нулевой сверток super.onCreate(savedInstanceStateNull);
private final Bundle savedInstanceStateNull = null;
private boolean mLandscape = false;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceStateNull);
setContentView(R.layout.activity_article_list);
mLandscape = getResources().getBoolean(R.bool.landscape);
final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
manageFragments();
}
вопрос Ur является ListFragment в кожевенном постион – Nithinlal
удалить опцию скрыть от кода и попытаться добавить фрагмент с задним стеком. Я думаю, что ваша проблема может быть решена. – Nithinlal
еще одна вещь просто удалите еще часть из on onBackPressed и вызовите popBackStack() – Nithinlal