Hinzufügen von Fragmenten zu einem layout

Ich versuche, meine app mehr tablet-freundlich, und so bin ich versucht zu lernen, Fragmente. Ich will die typische zwei-Fenster-layout, wobei die linke Seite die "navigation", und klicken Sie auf eines der Elemente, und es ändert sich das fragment auf der rechten Seite.

Kann ich duplizieren Sie die tutorials, die mit einem ListFragment für die Links, und wenn Sie auf einer von Ihnen aktualisiert es den "details" - fragment auf der rechten Seite.

Habe ich versucht, das beste ich kann, um doppelten code, und verwenden Sie einfach ein LinearLayout mit Tasten für die linke Seite, so dass, wenn auf eine Schaltfläche geklickt wird, lädt er das entsprechende fragment auf der rechten Seite, aber es funktioniert nicht.
Wenn ich versuche, mir die FragmentTransaction, bekomme ich java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first. Was ist Elternteil des Kindes, und warum muss ich call removeView drauf?

Ich versuche, laden Sie das fragment in ein FrameLayout, aber ich habe auch gerade versucht, anstelle ein weiteres Fragment im layout, und bekomme immer noch den Fehler.

Idealerweise möchte ich die linke fragment-zu nehmen, bis der gesamte Bildschirm, bis eine Taste gedrückt wird, die erfordert, dass ein fragment von der linken Seite, aber es ist ein problem in einer Zeit, nehme ich an.

Code

Haupttätigkeit

public class FragmentExample2Activity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

SelectorFragment (Linke Seite)

public class SelectorFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        View fragment = inflater.inflate(R.layout.selector, container);

        Button button1 = (Button) fragment.findViewById(R.id.button1);

        button1.setOnClickListener(new OnClickListener(){

            @Override
            public void onClick(View v) {

                getFragmentManager().beginTransaction().replace(R.id.detail_holder, new DetailsFragment(), "stuff").commit();

            }

        });


        return fragment;
    }
}

DetailsFragment

public class DetailsFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
        return inflater.inflate(R.layout.details, container);
    }
}

main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <fragment class="com.coreno.testfragment.SelectorFragment"
        android:id="@+id/select"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:layout_weight="1"
        />

    <fragment class="com.coreno.testfragment.DetailsFragment"
        android:id="@+id/detail_holder"
        android:layout_width="match_parent"
        android:layout_height="match_parent" 
        android:layout_weight="2"
        />
    <!-- 
    <FrameLayout
        android:id="@+id/detail_holder" 
        android:layout_width="0px"
        android:layout_height="match_parent"
        android:layout_weight="2"
        />
 -->
</LinearLayout>
InformationsquelleAutor coreno | 2012-02-10
Schreibe einen Kommentar