Fragment ne montre pas après le gonflage [fixe, mais ...]
Question
Je suis en train de créer un lecteur de musique qui sera visible dans toutes mes activités. Pour ce faire, je vais utiliser un Fragment
comme certains d'entre vous m'a conseillé plus tôt.
Depuis que je n'ai aucune expérience avec Fragments
que ce soit, j'ai décidé de mettre en œuvre un fragment dans une activité « de remplissage » en premier.
J'ai créé un simple fragment contenant uniquement un bouton et un texte, et d'essayer de gonfler dans mon activité de remplissage.
Cependant, après le gonflage ce fragment ne se présente pas. Un message ne soit imprimé à LogCat me dire que le fragment a été gonflait.
Je suis assez sûr que je me manque quelque chose, mais comme je n'ai aucune expérience et je ne pouvais pas trouver un tutoriel qui explique tout à fait comment faire, je ne sais pas ce qu'il est que je suis manquante.
Baladeur Fragment
public class AppMusicPlayer extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
System.out.println("fragment added");
return inflater.inflate(R.layout.musicplayer_main, container, false);
}
}
Musique mise en page du joueur
<?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="wrap_content"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is the fragment you're looking for" />
</LinearLayout>
Activité de remplissage
public class Filler extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.filler);
Button b = (Button) findViewById(R.id.terug);
b.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0) {
Intent intent = new Intent();
setResult(RESULT_OK, intent);
finish();
}
});
}
}
mise en page de remplissage
<?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" >
<!-- Title bar -->
<RelativeLayout
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:background="@drawable/title_bar" >
<TextView
android:id="@+id/fillertitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:text="Work In Progress"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" >
</TextView>
<Button
android:id="@+id/terug"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_centerVertical="true"
android:background="@drawable/button_back"
android:text="Back"
android:textColor="#FFFFFFFF"
android:textStyle="bold" >
</Button>
</RelativeLayout>
<!-- End of title bar -->
<TextView
android:id="@+id/wip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="This section of the app has not been made yet. Work in progress." >
</TextView>
<fragment
android:id="@+id/musicPlayerFragment"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:name="com.mobowski.app.player.AppMusicPlayer" />
</LinearLayout>
Il est évident que je fais quelque chose de mal, mais quoi?
Remarque:. J'utilise Android 2.3 avec la bibliothèque de compatibilité
Toute aide est appréciée
Le problème a été résolu avec l'aide de Yashwanth Kumar et blessenm. On a donné une solution XML, l'autre une solution programmatique. Maintenant, je me demande quelle est la solution la plus souhaitable. Y a-t-il des concessions à faire avec l'une des solutions, ou fait tout bouillir jusqu'à solution préférée du programmeur?
La solution
Je n'ai pas essayé d'ajouter des fragments directement à XML. Mais ce que je fais normalement est d'ajouter un framelayout ou LinearLayout à la mise en page de remplissage.
Supposons que son id est 'fragment_holder'. J'utilise le code suivant dans l'activité de fragment juste après setContentView. Essayez ceci
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragment_holder,new AppMusicPlayer(),"musicplayer");
ft.commit();
Autres conseils
vous devriez mentionner layout_height comme 0dip, pas la largeur en disposition linéaire verticale.
changement qu'il devrait fonctionner.
<fragment
android:id="@+id/musicPlayerFragment"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:name="com.mobowski.app.player.AppMusicPlayer" />