Quiero crear un Activity
que muestra una especie de menú por el que un usuario puede pasar. Al hacer clic en un elemento, se muestra una nueva pantalla, que permite al usuario más opciones (similar a un asistente).Alternar entre fragmentos en una sola actividad
que quería implementar esto usando Fragment
s, pero que no funciona para mí.
Ahora mismo tengo:
main.xml
:
<?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="fill_parent"
android:orientation="vertical"
android:id="@+id/main_fragmentcontainer" >
<fragment
android:id="@+id/mainmenufragment"
android:name="com.myapp.MainMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<fragment
android:id="@+id/secondmenufragment"
android:name="com.myapp.SecondMenuFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
MainMenuFragment
con un OnClickListener
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.mainmenu, container, false);
setupButton(view);
return view;
}
/* Button setup code omitted */
@Override
public void onClick(View v) {
SherlockFragment secondRunMenuFragment = (SherlockFragment) getSherlockActivity().getSupportFragmentManager().findFragmentById(R.id.secondmenufragment);
FragmentTransaction transaction = getSherlockActivity().getSupportFragmentManager().beginTransaction();
transaction.replace(android.R.id.content, secondMenuFragment); //also crashes with R.id.main_fragmentcontainer
transaction.addToBackStack(null);
transaction.commit();
}
Ahora cuando se presiona el botón, la aplicación se bloquea con este Logcat:
06-27 01: 45: 26.309: E/AndroidRuntime (8747): java.lang.IllegalStateException: No se puede cambiar la ID del contenedor del fragmento SecondMenuFragment {405e2a70 # 1 id = 0x7f060029}: era 2131099689 ahora 2131099687
06-27 01: 45: 26.309: E/AndroidRuntime (8747): en android.support.v4.app.BackStackRecord.doAddOp (origen desconocido)
06-27 01: 45: 26.309: E/AndroidRuntime (8747): en android.support.v4.app.BackStackRecord.replace (Fuente desconocida)
06-27 01: 45: 26.309: E/AndroidRuntime (8747): en android.support.v4.app.BackStackRecord.replace (Fuente desconocida)
06-27 01: 45: 26.309: E/AndroidRuntime (8747): en com.myapp.MainMenuFragment $ MyButtonOnClickListener.onClick (MainMenuFragment.java:52)
¿Qué estoy haciendo mal?
[Hay una pregunta similar aquí] (http://stackoverflow.com/questions/9092048/swap-two-fragment- simultáneamente) – adneal
Si está intentando crear un asistente, ¿para qué sirve el segundo ''? –
CommonsWare
He visto esos enlaces, pero no sé cómo aplicarlos en mi caso. – nhaarman