El fragmento no se muestra después de inflar [fijo, pero ...
Pregunta
Estoy tratando de crear un reproductor de música que sea visible en todas mis actividades. Para hacer esto, voy a usar un Fragment
Como algunos de ustedes me aconsejaron antes.
Ya que no tengo experiencia con Fragments
En todo momento, decidí implementar un fragmento en una actividad de "relleno" primero. Creé un fragmento simple que contenía solo un botón y algún texto, e intenté inflarlo en mi actividad de relleno.
Sin embargo, después de inflar este fragmento no aparece. Se imprime un mensaje para que Logcat me indique que el fragmento se ha estado inflando.
Estoy bastante seguro de que me estoy perdiendo algo, pero como no tengo experiencia con esto y no pude encontrar un tutorial que explique cómo hacer esto, no sé qué es lo que me estoy perdiendo.
Fragmento de reproductor de música
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);
}
}
Diseño del reproductor de música
<?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>
Actividad de relleno
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();
}
});
}
}
Diseño de relleno
<?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>
Obviamente estoy haciendo algo mal, pero ¿qué?
Nota: Estoy usando Android 2.3 con la biblioteca de compatibilidad.
Se agradece cualquier ayuda
El problema se ha solucionado con la ayuda de Yashwanth Kumar y Blessenm. Uno dio una solución XML, la otra una solución programática. Ahora me pregunto qué solución es la más deseable. ¿Hay alguna concesión que se haga con cualquiera de las soluciones, o todo se reduce a la solución preferida del programador?
Solución
No he intentado agregar fragmentos directamente a XML. Pero lo que normalmente hago es agregar un framelayout o linealLayout al diseño de relleno.
Supongamos que su identificación es 'fragment_holder'. Utilizo el siguiente código en la actividad de fragmentos justo después de SetContentView. Prueba esto
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragment_holder,new AppMusicPlayer(),"musicplayer");
ft.commit();
Otros consejos
Debe mencionar LEYOUT_HEight como 0DIP, no el ancho en el diseño lineal vertical.
cambiar que debería funcionar.
<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" />