2014-04-25 3 views
2

Bonjour, je suis très nouveau dans Android. J'essaie de remplacer un fragment ajouté statiquement dans le fichier de mise en page. Mais si j'instanciais mon fragment dans ma mise en page xml, le contenu resterait visible après le remplacement par un autre fragment au moment de l'exécution.Fragment Android Duplication: Impossible de remplacer le fragment ajouté statiquement

Voici mon code d'activité:

import android.app.Activity; 
import android.app.Fragment; 
import android.app.FragmentManager; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.view.View; 

public class RetailerActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_retailer); 
} 

public void selectFrag(View view) { 
    Fragment fr; 

    if (view == findViewById(R.id.button2)) { 
     fr = new FragmentTwo(); 
    } else if (view == findViewById(R.id.button3)) { 
     fr = new FragmentThree(); 
    } else { 
     fr = new FragmentOne(); 
    } 

    FragmentManager fm = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, fr); 
    fragmentTransaction.commit(); 

} 
} 

Voici mon fichier XML d'activité:

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

<Button 
    android:id="@+id/button1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="selectFrag" 
    android:text="Fragment No.1" /> 

<Button 
    android:id="@+id/button2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="selectFrag" 
    android:text="Fragment No.2" /> 

<Button 
    android:id="@+id/button3" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="selectFrag" 
    android:text="Fragment No.3" /> 

<LinearLayout 
android:orientation="vertical" 
android:id="@+id/fragment_container" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" > 

<fragment 
    android:id="@+id/fragment_place" 
    android:layout_width="match_parent" 
    android:layout_height="fill_parent" /> 

</LinearLayout> 

fichier XML FragmentOne:

<?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="vertical" 
    android:background="#00ffff"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:text="This is fragment No.1" 
     android:textStyle="bold" /> 

    </LinearLayout> 

FragmentOne fichier java:

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class FragmentOne extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 

    return inflater.inflate(R.layout.fragment_one, container, false); 
} 

}

FragmentTwo fichier xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:background="#00ffff"> 
    <TextView 
     android:id="@+id/textfrag2" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="This is fragment No.2" 
     android:textStyle="bold" /> 

</LinearLayout> 

FragmentTwo code java:

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class FragmentTwo extends Fragment { 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 

    // Inflate the layout for this fragment 

    return inflater.inflate(R.layout.fragment_two, container, false); 
} 

}

Merci à l'avance.

Répondre

2

J'ai également étudié ce problème et je n'arrive pas à trouver une solution pour placer un fragment de manière statique dans le fichier XML. Dans votre fichier XML d'activité, vous devrez remplacer la partie Fragment par une FrameLayout (l'ID peut rester le même, remplacez simplement 'Fragment' par 'FrameLayout'); seul moyen de faire votre méthode selectFrag avec FragmentTransaction remplacer les fragments sans chevauchement.

(Si vous voulez avoir un fragment par défaut affiché lorsque l'activité commence, dupliquer le code FragmentTransaction dans la méthode onCreate de l'activité et échanger la vue FrameLayout blanc avec fragmenter)

Questions connexes