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?

Était-ce utile?

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" />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top