13

Я пытаюсь добавить фрагмент программно в LinearLayout, но фрагмент не растягивает его содержимое по всей высоте макетов. Он действует как wrap_content вместо fill_parent.Android 3 - Добавление фрагмента в LinearLayout: fill_parent не работает

С другой стороны, fill_parent работает по ширине фрагмента. Как я могу изменить это поведение?

DashboardActivity:

<?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:orientation="horizontal" > 

    <fragment 
     android:id="@+id/fragment_dashboard" 
     android:layout_width="5dp" 
     android:layout_height="fill_parent" 
     android:layout_marginLeft="20dp" 
     android:layout_weight="1" 
     android:name="de.upb.cs.ginkgo.tablet.ui.fragments.DashboardFragment" > 
     <!-- Preview: [email protected]/fragment_dashboard --> 
     </fragment> 

    <LinearLayout 
     android:id="@+id/rightfrag" 
     android:layout_width="450dp" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:layout_marginTop="10dp" 
     android:layout_marginBottom="15dp" 
     android:layout_marginRight="10dp" > 
    </LinearLayout> 

</LinearLayout> 

Его OnCreate метод:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_dashboard); 
    //-- Instantiate Fragmentstuff 
    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 
    ActivitystreamFragment asf = new ActivitystreamFragment(); 
    fragmentTransaction.add(R.id.rightfrag, asf); 
    fragmentTransaction.commit(); 
    } 

ActivitystreamFragment XML:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_weight="1"> 

    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:drawSelectorOnTop="true" 
     android:background="@drawable/back_rightfrag" 
     > 
</ListView> 
</LinearLayout> 

И его CreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 
     View root = inflater.inflate(R.layout.fragment_activitystream, null); 
     return root; 
     } 

ответ

25

Хорошо - этот был довольно немым. Я сменил контейнер с LinearLayout на FrameLayout и voilà: он работает.

+6

Спасибо. Но я не знаю, почему FrameLayout работает, но LinearLayout doen't –

+0

Вы пытались помещать FrameLayout * внутрь * LinearLayout? – zmbq

+6

@NguyenMinhBinh: Поскольку FrameLayout ставит своих детей друг на друга, LinearLayout, с другой стороны, помещает своих детей дальше (по горизонтали или по вертикали) друг к другу. Переходы действительно работают, но недавно добавленный фрагмент находится за пределами дисплея. – Kuno

Смежные вопросы