Domanda

Sto cercando di creare un lettore musicale che sarà visibile in tutte le mie attività. Per fare questo, ho intenzione di utilizzare un Fragment come alcuni di voi mi ha consigliato in precedenza.

Dato che non ho alcuna esperienza con Fragments di sorta, ho deciso di implementare un frammento in un'attività "filler" per primo. Ho creato un semplice frammento che contiene solo un pulsante e testo, e provare a gonfiare che nella mia attività di riempimento.

Tuttavia, dopo aver gonfiato questo frammento non si presenta. Un messaggio venga stampato per LogCat dirmi che il frammento è stato gonfiare.

Sono abbastanza sicuro che mi manca qualcosa, ma dal momento che non ho alcuna esperienza con questo e non riuscivo a trovare un tutorial che molto ha spiegato come fare questo, non so che cosa è che io sono manca.

Lettore musicale Frammento

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);
        }


}

Music Player Layout

<?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>

Filler attività

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();
            }
        });

    }

}

Filler disposizione

<?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>

Ovviamente sto facendo qualcosa di sbagliato, ma cosa?

Nota. che sto utilizzando Android 2.3 con la libreria di compatibilità

Ogni aiuto è apprezzato


Il problema è stato risolto con l'aiuto di Yashwanth Kumar e blessenm. Uno ha dato una soluzione XML, l'altro una soluzione programmatica. Ora mi chiedo solo quale soluzione è la più desiderabile. Ci sono concessioni da effettuare con una delle soluzioni, o lo fa tutte si riducono alla soluzione preferita del programmatore?

È stato utile?

Soluzione

Non ho provato ad aggiungere frammenti direttamente in XML. Ma quello che faccio di solito è aggiungere un framelayout o LinearLayout al layout di riempimento.

Si supponga che il suo id è 'fragment_holder'. Io uso il seguente codice nell'attività frammento subito dopo setContentView. Prova questo

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragment_holder,new AppMusicPlayer(),"musicplayer");
ft.commit();

Altri suggerimenti

si dovrebbe parlare layout_height come 0dip, non la larghezza nel layout lineare verticale.

cambiamento che dovrebbe funzionare.

<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" />
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top