Фрагмент не отображается

У меня возникла проблема, когда я могу создать фрагмент, его представление создается, но оно не отображается. Сам фрагмент создается, и любой код внутри работает без проблем, но он просто невидим. Кнопка «Назад» также взаимодействует с ней просто отлично (она «закрывает» ее), она просто физически не отображается на экране (отображается только основной макет).

Из моего FragmentActivity:

protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_view); // some logic here that sets a button listener that calls openAddNamePane() when pressed } public void openAddNamePane(){ AddNamePane addNamePane = new AddNamePane(); FragmentManager fragmentManager = getSupportFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.replace(R.id.layout_root, addNamePane, "AddnamePane"); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } 

Это макет для представления, которое сначала отображается (activity_main_view.xml aka мой «корневой макет»):

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" android:background="@color/white" android:id="@+id/layout_root"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Button android:id="@+id/addPlayerButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add Player" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/buttonLabel" /> </LinearLayout> <ListView android:id="@+id/playerListView" android:layout_width="match_parent" android:layout_height="match_parent" android:cacheColorHint="@color/white" android:entries="@array/testStringArray" > </ListView> </LinearLayout> 

Это мой класс фрагмента:

 public class AddNamePane extends Fragment { public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); } public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { System.out.println("AddNamePane.onCreateView()"); View view = inflater.inflate(R.layout.add_player_pane_layout, container, false); return view; } // a few other methods here, onAttach(), onStop(), onPause(), etc // all are empty of logic with just a println to see if they are being called correctly (in which they are) } 

Это макет для этого фрагмента «AddNamePane»:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:text="test name here" android:hint="Name here" > <requestFocus /> </EditText> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

Я довольно новичок в использовании фрагментов, не слишком уверен, что моя проблема в коде или что-то связано с макетами. Моя цель – добавить «AddNamePane» в «корневой макет», временно заменяя основной вид. То, что я сделал, чтобы попытаться сделать это, – это дать моему корневому макету идентификатор и использовать его в FragmentTransaction. Если это имеет значение, уровень api, который я использую, – 8 (Android 2.2), таким образом, используя вещи из пакета android.support.v4.app.

Вы пытаетесь программно заменить LinearLayout , а также ожидаете, что у него будут жестко закодированные дети. Это не сработает. Вы должны использовать FrameLayout для вашего FragmentTransaction который также является дочерним элементом вашего layout_root .

Если вы обновите свой пост с помощью фактического xml, я могу показать вам, как это сделать.

У меня была аналогичная проблема, когда фрагмент не показывался. Проблема заключалась в том, что я удалил AndroidAnnotations, но забыл переместить код из методов onViewCreated и onCreate в onCreateView. Я нашел эту ошибку, сравнив код двух фрагментов – один, который появился, а другой – нет. Итак, если у вас есть подобные проблемы, попробуйте проверить код фрагментов. На первый взгляд он может не показывать никаких ошибок, но не будет работать или обнаруживаться из-за этих ошибок.

В частности, убедитесь, что у вас есть этот метод и что вы раздуваете представление:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.your_fragment_layout, container, false); return v; }