14

I am trying to add a fragment programmatically to a LinearLayout, but the fragment does not stretch its content across the whole layouts height. It acts like wrap_content instead of fill_parent.

On the other side the fill_parent works on the fragment's width. How can I change this behaviour?

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: layout=@layout/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>

Its onCreate method:

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

The 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>

And its createView:

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

1 Answers1

26

Ok - this one was pretty dumb. I changed my container from a LinearLayout to a FrameLayout and voilà: it's working.

caiuspb
  • 974
  • 1
  • 9
  • 23
  • 6
    Thanks. But I don't know why the FrameLayout works but LinearLayout doen't – Nguyen Minh Binh Nov 25 '12 at 15:50
  • Did you try putting the FrameLayout *inside* the LinearLayout? – zmbq Dec 26 '13 at 09:14
  • 8
    @NguyenMinhBinh: Because FrameLayout puts its children on top of each other, a LinearLayout on the other hand puts its children next (horizontally or vertically) to each other. The transitions do work, but the newly added Fragment is outside of the display. – Kuno Jan 07 '14 at 09:43
  • Grate catch :) its working but i don't know what was the reason to get this wired output in linearlayout, again thanks :) – Chintan Khetiya Apr 18 '14 at 07:43