Intereting Posts
Android – утечка памяти, что я делаю неправильно? Прокрутка в списке с различной высотой ячейки ListView на вкладке салфетки не обновляется, если не перезапустить Как я могу заставить этот rxjava zip работать параллельно? Как указать OpenSSL на корневые сертификаты на устройстве Android? Android TextView не обновляет свой текст, если для параметра textIsSelectable установлено значение true Как настроить WebChromeClient для открытия новой страницы в том же представлении? В чем разница между `Matrix.setRotate` и` Matrix.postRotate` Как разрешить «неизвестную версию Android на устройстве». Постоянная и, вероятно, неточная частота кадров Блокировка ориентации экрана QML Свойство высот Android не работает Есть ли существенные накладные расходы при использовании FragmentActivity над обычной Activity в Android? Переопределить приложение обмена сообщениями по умолчанию android Активность NavigationDrawer загромождена обратными вызовами фрагмента и бизнес-логикой приложения

Fragment.onCreateView имеет пустой контейнер

Следующее работает на Android 1.6, поэтому я использую пакет совместимости для фрагментов. В следующем TestFragment есть статический вложенный класс:

 public class FragmentTestActivity extends FragmentActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public static class TestFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { TextView result = new TextView(getActivity()); result.setText("Hello TestFragment"); return result; } } 

}

Файл main.xml:

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <fragment class="com.test.FragmentTestActivity$TestFragment" android:id="@+id/test" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </FrameLayout> 

Странно, что параметр container в onCreateView равен null .

Теперь, если я добавлю фрагмент программно так же (просто измените метод onCreate для Activity), контейнер больше не будет null. Зачем?

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Fragment frag = new TestFragment(); getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit(); } 

В документации упоминается, что она может быть нулевой:

Public View onCreateView (плагин LayoutInflater, контейнер ViewGroup, Bundle savedInstanceState)

[…]

Container: Если не null , это родительское представление, к которому должен быть присоединен пользовательский интерфейс фрагмента. Фрагмент не должен добавлять само представление , но это может быть использовано для создания LayoutParams представления.

Чтобы быть ясным: вы не должны делать ничего подобного container.addView(...) .