Entfernen von Fragment funktioniert nicht

  • 2 Antworten
  • Neuester Beitrag
Diskutiere Entfernen von Fragment funktioniert nicht im Android App Entwicklung im Bereich Betriebssysteme & Apps.
M

markusk73

Neues Mitglied
Hallo,
ich beschäftige mich grad mit den Fragmenten und zu diesem Zweck hab ich mir ein ganz simples Fragment-Layout gestrickt, dieses dreimal direkt ins Layout der Main-Activity eingefügt und noch drei Buttons mit dem ich das jeweilige Fragment über eine Transaktion mit remove entfernen wollte aber das Fragment wird immer noch angezeigt.

Hier das Layout der Main Activity:
Code:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mainLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <fragment
        android:id="@+id/fragment"
        android:name="com.myapps.myfragments.Fragment1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment2"
        android:name="com.myapps.myfragments.Fragment2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <fragment
        android:id="@+id/fragment3"
        android:name="com.myapps.myfragments.Fragment3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingTop="10dp">

        <Button
            android:id="@+id/btnMainFragment1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/fragment1_main_btn_label"
            app:backgroundTint="@android:color/holo_blue_dark" />

        <Button
            android:id="@+id/btnMainFragment2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/fragment2_main_btn_label"
            app:backgroundTint="@android:color/holo_blue_dark" />

        <Button
            android:id="@+id/btnMainFragment3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:text="@string/fragment3_main_btn_label"
            app:backgroundTint="@android:color/holo_blue_dark" />

        <TextView
            android:id="@+id/tvMain"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="TextView"
            android:textAppearance="@style/TextAppearance.AppCompat.Large" />
    </LinearLayout>

</LinearLayout>
Und hier der Code im OnClickListener zum Entfernen des zweiten Fragments:
Code:
FragmentManager fm = getSupportFragmentManager();
Fragment2 fragment = (Fragment2) fm.findFragmentById(R.id.fragment2);

if (fragment != null) {
    Log.d("xyz", String.valueOf(fragment.getId()));
    FragmentTransaction ft = fm.beginTransaction();
    ft.setReorderingAllowed(true);
    ft.remove((Fragment2) fragment);
    ft.commit();
}
Wieso bleibt das Fragment nach dem remove noch immer sichtbar?

lg, Markus
 
M

markusk73

Neues Mitglied
Hallo,

hat sich erledigt, hab inzwischen rausgefunden daß man Fragmente die direkt in einer Layout-Datei definiert sind nicht dynamisch ersetzen / entfernen kann.

Aber in diesem Zusammenhang ist eine andere Frage aufgetaucht:

Ich hab z.B. ein LinearLayout und füge dort dynamisch mehrere Fragmente mit add hinzu. Wie kann ich nun gezielt ein Fragment durch ein anderes austauschen? Ich hab überall nur Beispiele gefunden bei denen bei replace als erster Parameter die id des Containers und dann das Fragment angegeben wird. Ich brauch aber was in der art: ersetze im container xy das fragment A durch das fragment B.

Geht das?

lg, Markus
 
J

jogimuc

Stammgast
Hallo
Ich hab überall nur Beispiele gefunden bei denen bei replace als erster Parameter die id des Containers und dann das Fragment angegeben wird. Ich brauch aber was in der art: ersetze im container xy das fragment A durch das fragment B.
Eigentlich ist „replace“ genau die richtige Methode die du brauchst.

Ich denke du verstehst nicht den unterschied zwischen dem Container und den Fragment Objekt (Instanz deiner Fragment Klasse ).
Der Container ist ein View Objekt in denen die in Java code erzeugten Instanzen deiner Fragment Klassen eingeblendet werden.

Der Container darf natürlich kein tag wie diese enthalten.
android:name="com.myapps.myfragments.Fragment2"
es soll ja dynamisch sein.

Bei der ersten Transaction wird das Fragment mit add hinzugefügt und danach mit replace getauscht.
 
Zuletzt bearbeitet:
Ähnliche Themen - Entfernen von Fragment funktioniert nicht Antworten Datum
1
8