2011-12-01 20 views
6

Sto provando a creare un lettore musicale che sarà visibile in tutte le mie attività. Per fare questo, userò uno Fragment come qualcuno di voi mi ha consigliato in precedenza.Il frammento non viene visualizzato dopo il gonfiaggio [Fisso, ma ...]

Poiché non ho esperienza con Fragments, ho deciso di implementare un frammento in un'attività di "riempimento" prima. Ho creato un semplice frammento contenente solo un pulsante e del testo, e provo a gonfiarlo nella mia attività di riempimento.

Tuttavia, dopo il gonfiaggio, questo frammento non viene visualizzato. Un messaggio viene stampato su LogCat che mi dice che il frammento si è gonfiato.

Sono sicuro che mi manca qualcosa, ma poiché non ho esperienza con questo e non ho potuto trovare un tutorial che ha spiegato abbastanza come fare questo, non so cosa sia che io ' m mancante.

Lettore musicale Frammento di layout

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

<?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: Sto utilizzando Android 2.3 con la libreria Compatibilità.

Qualsiasi aiuto è apprezzato


Il problema è stato risolto con l'aiuto di Yashwanth Kumar e blessenm. Uno ha fornito una soluzione XML, l'altro una soluzione programmatica. Ora mi sto chiedendo quale sia la soluzione più desiderabile. Ci sono delle concessioni da fare con una delle soluzioni o si riduce alla soluzione preferita dal programmatore?

+1

Se si utilizza solo uno specifico 'frammento' e non si intende mai accenderlo, direi che sarebbe preferibile il modo xml. Se si intende scambiare intorno a 'Fragments' quando l'app è in esecuzione, aggiungere il' Fragment' in modo programmatico potrebbe essere desiderabile per controllare il flusso (ad es.sai cosa viene visualizzato 'Frammento' e quale scambiare con). – kaspermoerch

+0

Va bene, passerò all'XML perché (per ora almeno) il lettore musicale sarà l'unico "frammento". Grazie per la risposta! –

risposta

9

Non ho provato ad aggiungere frammenti direttamente a xml. Ma quello che faccio normalmente è aggiungere un framelayout o linearlayout al layout del filler.

Supponiamo che il suo id sia "framment_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(); 
+0

Vorrei poter accettare sia la tua risposta sia quella di Yashwanth. Entrambe le tue risposte hanno funzionato perfettamente. Ora mi sto chiedendo quale sarebbe la scelta "migliore", aggiungendola nell'XML o aggiungendola a livello di codice. Ci sono convenzioni per questo? –

+0

yashwanths era la risposta corretta. Il mio è solo una soluzione alternativa. – blessenm

+0

Cambia la mia risposta accettata in giro. Dopo aver smosso con il frammento, non sono riuscito ad aggiungerlo a un framelayout, tuttavia il tuo metodo ha funzionato perfettamente. Quindi grazie ancora –

7

dovresti menzionare layout_height come 0dip, non la larghezza nel layout lineare verticale.

cambiare 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" /> 
+0

Vorrei poter accettare sia la tua risposta sia quella di Blessen. Entrambe le tue risposte hanno funzionato perfettamente. Ora mi sto chiedendo quale sarebbe la scelta "migliore", aggiungendola nell'XML o aggiungendola a livello di codice. Ci sono convenzioni per questo? –

Problemi correlati