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(); } 

Solutions Collecting From Web of "Fragment.onCreateView имеет пустой контейнер"

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

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

[…]

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

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