2011-03-11 29 views
6

Tengo el siguiente código en mi Actividad:Android Fragmento backStack tema

 public void categoryClicked(int categoryId, String categoryName) {     


ItemList newFragment = ItemList.newInstance(categoryId); 
        FragmentTransaction ft = getFragmentManager().beginTransaction(); 
        ft.replace(R.id.itemContainer, newFragment); 
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); 
        ft.addToBackStack(null);   
        ft.commit(); 
      } 

Funciona como se esperaba, soy capaz de volver después de hacer clic un par de veces a los estados anteriores. Sin embargo, si sólo voy un profundo, tengo la siguiente excepción:

03-10 22:17:19.895: ERROR/AndroidRuntime(23075): java.lang.IllegalStateException: Content view not yet created 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.ListFragment.ensureList(ListFragment.java:377) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.ListFragment.getListView(ListFragment.java:277) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at com.xxxxx.fragment.ItemList.onActivityCreated(ItemList.java:67) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:749) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:921) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.BackStackRecord.popFromBackStack(BackStackRecord.java:639) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.FragmentManagerImpl.popBackStackState(FragmentManager.java:1254) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.FragmentManagerImpl.popBackStackImmediate(FragmentManager.java:402) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.Activity.onBackPressed(Activity.java:2057) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.Activity.onKeyDown(Activity.java:1953) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.view.KeyEvent.dispatch(KeyEvent.java:2335) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.Activity.dispatchKeyEvent(Activity.java:2236) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:1648) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.view.ViewRoot.deliverKeyEventPostIme(ViewRoot.java:2682) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.view.ViewRoot.handleFinishedEvent(ViewRoot.java:2655) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1952) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.os.Looper.loop(Looper.java:126) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at android.app.ActivityThread.main(ActivityThread.java:3997) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at java.lang.reflect.Method.invoke(Method.java:491) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
03-10 22:17:19.895: ERROR/AndroidRuntime(23075):  at dalvik.system.NativeStart.main(Native Method) 

Así que, básicamente, si yo llamo el reemplazar una vez, los errores por mi cuando pulso el botón de retroceso.

Además, con ListFragment, ¿tengo que establecer el fondo en blanco? No lo toqué y puedo ver el antiguo listado de listas mostrando ...

¡Gracias!

+0

¿Cómo colocas los fragmentos en el diseño? – Macarse

+0

Lo tengo definido en XML como hijo de ViewGroup R.id.itemContainer – runor49

+0

mmm .. intente pegar el diseño xml. – Macarse

Respuesta

1

Bueno, el problema con el que se está encontrando es que no hay fragmentos a los que recurrir. Esto es lo que puedes hacer. 1: Verifique si el fragmento existe en la copia posterior (dándole un nombre) y luego desactive volver atrás 2: Cuando inicie por primera vez su programa, agregue un fragmento a la copia posterior, como un estado inicial antes de hacer clic. Sin embargo, incluso en esta situación, todavía necesitarás hacer una prueba para ver si queda algo en la backstack para volver.

+0

pero si no hay ningún fragmento al que regresar, ¿no debería simplemente volver a la pantalla de inicio como una actividad normal? – runor49

+0

Buen punto. Creo que el problema al que te estás enfrentando es que el diseño de los fragmentos no se está rellenando en el método onActivityCreated. Recientemente tuve un problema similar (como ayer por la noche) con mis fragmentos que se muestran vacíos si se los llama y el método de activación de actividad no estaba ocupando mi lista. Entonces, lo que hice fue agregar el código para llenar la lista dentro de onActivityCreate (que es lo que se llama cuando extraes un fragmento de la backstack). Inténtalo, completa la lista con valores no esenciales en onActivityCreate – Shaun

+0

que debería eliminar el error de vista de contexto no creado. – Shaun

Cuestiones relacionadas