Intereting Posts
ListView, атрибут id которого является «android.R.id.list» Ошибка при правильном наборе идентификатора ListView Проверить, была ли включена блокировка или нет Получить все строки, определенные в apk Android: невозможно выполнить операцию / ClassNotFoundException Facebook глубокая привязка к Android Эффективное создание LayoutInflater Android: недопустимое использование SingleClientConnManager: соединение по-прежнему выделено Android Какой способ хранения URL-адресов лучше всего? Статические члены данных или в String.xml? Что лучше загружать изображения для ListView? Gradle: Как отобразить результаты androidTest в консоли? Android получить местоположение от лучшего поставщика доступны Могут ли старые жетоны GCM жить даже после удаления? Новый Intent () запускает новый экземпляр с Android: launchMode = "singleTop" Виджет для включения / выключения фонарика камеры в Android Есть ли простой способ нанести удар по тексту в виджетах приложения?

Android – показать / скрыть фрагмент покинет пустую область

Данный:

  1. Два вертикально расположенных элемента на экране (ViewPager и Fragment)
  2. Действие в первом выбранном в данный момент фрагменте (ViewFlipper) переключает между текстовым и WebView-представлением в верхнем фрагменте и скрывает / показывает нижний фрагмент.

Наблюдаемый:

  1. Скрытие нижнего фрагмента оставляет пустое пространство, в котором находится нижний фрагмент.

Я попробовал как Relative, так и LinearLayout (с верхним фрагментом, установленным в weight=1 ), но оба эффекта не имеют эффекта после удаления фрагмента снизу. У меня все еще пустое место внизу

Вот файл верхнего уровня:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1"/> <!-- This gets replaced with appropriate fragment at run time --> <LinearLayout android:id="@+id/scrollFragmentPlaceholder" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="110dip" /> </LinearLayout> 

Вот код, который переключает фрагмент

  Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); if (scroll.isHidden() == isWebView) return; // already handled, do nothing FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); if (scroll != null && scroll.isAdded()) { if (isWebView) { tr.hide(scroll); } else tr.show(scroll); } tr.commit(); 

И вот как это выглядит: Нижний фрагмент скрыт

Solutions Collecting From Web of "Android – показать / скрыть фрагмент покинет пустую область"

Через месяц я понял, как это сделать. Оказывается, что простого сокрытия фрагмента недостаточно, в основном мне нужно скрыть / показать оболочку, содержащую фрагмент. По-прежнему LinearLayout изначально был определен в XML. Фактически, достаточно установить видимость на этом исходном макете, чтобы показать / скрыть фрагмент. Таким образом, код вопроса теперь выглядит следующим образом:

 public void onJobViewToggled(final boolean isWebView) { if (isFinishing()) return; final Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); if (scroll.isHidden() == isWebView) return; // already handled, do nothing final FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); if (scroll != null && scroll.isAdded()) { if (isWebView) { tr.hide(scroll); // shell is the original placeholder shell.setVisibility(View.GONE); } else { tr.show(scroll); shell.setVisibility(View.VISIBLE); } } tr.commit(); } 

Обратите внимание, что вы все еще хотите показать / скрыть фрагмент, чтобы это работало