ViewPager Android y Fragment Serialization -- android campo con serialization campo con android-fragments campo con android-viewpager campo con parcelable camp Relacionados El problema

Android ViewPager and Fragment serialization


2
vote

problema

Español

Tengo una actividad con dos atributos:

  • fragmento privado Firstfragment;
  • Fragmento privado Segundo fragmento;

en Método Oncreate:

      adapter = new MyPagerAdapter(getSupportFragmentManager());     pager = (ViewPager) findViewById(R.id.pager);     pager.setAdapter(adapter);     pager.setOffscreenPageLimit(6);     pager.setSaveEnabled(true);   

Donde MypagerAdapter extiende la clase FragmentStatePagerApter. En el método de GetItem ():

      @Override     public Fragment getItem(int position) {          Bundle args = new Bundle();          switch (position) {             case FIRST:                 secondFragment = new FirstFragment();                 secondFragment.setArguments(args);                 return secondFragment;             case SECOND:                 secondFragment = new SecondFragment();                 secondFragment.setArguments(args);                 return secondFragment;         }     }   

y todos funcionan correctamente.

Pero, cuando cambio la orientación de la pantalla, los atributos privados se establecen en NULL y perdí la referencia de dos fragmentos. Así que he intentado serializado este fragmento con:

  MouseLeftButtonDown="redballoon_click" 0  

y cargarlos en el método onecreate con:

  MouseLeftButtonDown="redballoon_click" 111  

Mis preguntas:

1. ¿Es la forma correcta del fragmento serializado en cambios de orientación de la pantalla de actividad?

2. A veces, tengo el error: "Desconocido el código de tipo desconocido 55 en offset 448", ¿es posible que haya causado por la serialización del fragmento? "

Editar:

Necesito tener los fragmentos como atributos de actividad porque he envejecido una interfaz de oyente en la actividad que:

  MouseLeftButtonDown="redballoon_click" 2  

Este método se invocó en Firstfragment. Entonces, el primer fragmento puede ejecutar un método de segunda fragmento.

Original en ingles

I've an activity with two attributes:

  • private Fragment firstFragment;
  • private Fragment secondFragment;

In onCreate method:

    adapter = new MyPagerAdapter(getSupportFragmentManager());     pager = (ViewPager) findViewById(R.id.pager);     pager.setAdapter(adapter);     pager.setOffscreenPageLimit(6);     pager.setSaveEnabled(true); 

where MyPagerAdapter extends FragmentStatePagerAdapter class. Into getItem() method:

    @Override     public Fragment getItem(int position) {          Bundle args = new Bundle();          switch (position) {             case FIRST:                 secondFragment = new FirstFragment();                 secondFragment.setArguments(args);                 return secondFragment;             case SECOND:                 secondFragment = new SecondFragment();                 secondFragment.setArguments(args);                 return secondFragment;         }     } 

and all works correctly.

But, when I change the screen orientation, the private attributes is set to null and I lost the reference of two fragments. So i've tried to serialized this fragment with:

@Override protected void onSaveInstanceState(Bundle outState) {     super.onSaveInstanceState(outState);     getSupportFragmentManager().putFragment(outState, FirstFragment.class.getName(), firstFragment);     getSupportFragmentManager().putFragment(outState, SecondFragment.class.getName(), secondFragment); } 

and load them into onCreate method with:

    if (savedInstanceState != null) {         firstFragment = (FirstFragment) getSupportFragmentManager().getFragment(savedInstanceState, FirstFragment.class.getName());         secondFragment = (SecondFragment) getSupportFragmentManager().getFragment(savedInstanceState, SecondFragment.class.getName());     } 

My questions:

1. Is it the correct way to serialized fragment into activity screen orientation changes?

2. Sometimes I've the error: "Unmarshalling unknown type code 55 at offset 448", is it possible that it has caused by fragment serialization?"

EDIT:

I need to have the fragments as activity attributes because I've a listener interface into activity that:

@Override public void executeTask(String what) {     secondFragment.executeTask(what); } 

this method was invoked into firstFragment. So the FirstFragment can execute a method of SecondFragment.

              

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

No estoy seguro de cuál puede ser la causa del problema, pero le daré una pista que pueda ayudar.

No creo que usted debe hacer referencia a Fragments en el Adapter del Activity . Principalmente debido al hecho de que es bastante difícil sincronizar el ciclo de vida Activity , Fragment Ciclo de vida y ViewPager Ciclos de vida de los niños. Y si emerge algún error, la depuración puede ser realmente dolorosa. Créeme, he estado allí, hecho eso ...

Por cierto, ¿hay alguna razón por la que necesita referencias a Fragments en su Activity ?

editar

No creo que deba pasar la información entre el Fragments de esta manera. En general, el Fragments0 maneja (crea, borra) 99887776611 En su propio y no puede estar seguro de que estos ViewPager12 estarán disponibles en cualquier momento.

Creo que la mejor manera sería mover sus datos a un modelo separado (entrada de la base de datos, Fragments3 o una clase de Singelton) y luego delejamos saber el Fragments4 Ese DATOS ha cambiado (por un Fragments5 en Fragments6 o simplemente notifique el Fragments7 para actualizar los datos de los niños llamando Fragments8 ).

Ejemplo

fragmenta --- & gt; oyente ( Fragments9 ) --- & gt; actividad --- & gt; Adapter0 ----- & gt; Fragmentb se actualiza

De esta manera, si alguna vez desea agregar un ViewPager21 o, de hecho, cualquier número de Adapter2 que utilizará los datos que no tendrá que preocuparse por actualizar los datos en ninguna de estos, solo deje que el Adapter3 se preocupe por ello.

 

I'm not sure what may be the cause of the problem but I'll give you a hint that may help.

I don't think that you should reference the Fragments in the Adapter from the Activity. Mainly due to the fact that it's pretty hard to synchronize the Activity life-cycle, Fragment lifecycle and ViewPager children life-cycles. And if any bugs emerge the debugging can be really painful. Believe me, been there, done that...

By the way - is there a reason why you need references to Fragments in your Activity ?

EDIT

I don't think you should pass the information between the Fragments this way. In general the FragmentManager handles (creates, deletes) Fragments on it's own and you cannot be sure that these Fragments will be available at any time.

I think that the best way would be to move your data to separate model (database entry, SharedPreference or a singelton class) and then letting know the Adapter that data has changed (by a DataObserver in Fragments or simply notify the Adapter to update children data by calling notifyDataChanged).

EXAMPLE

FragmentA --->listener (reloadData())--->Activity--->adapter.notifyDataChanged()-----> fragmentB gets updated

This way if you ever want to add a ThirdFragment or in fact any number of Fragments that will use the Data you will not have to worry about updating data in any of these - just let the Adapter worry about it.

 
 
 
 
0
 
vote

Si usa el mismo diseño para el retrato y el horizontal, cuando cambia la orientación, puede evitar la actividad recreada. Cambie su manifiesto como ...

  Adapter4  

y luego anular OnConfigurationChanged () en la actividad ...

  Adapter5  
 

If your using same layout for portrait and landscape then When orientation change you can avoid activity recreate. change your manifest as...

     <activity android:name=".activity.MainActivity"         android:configChanges="keyboardHidden|orientation|screenSize">      </activity> 

and then override onConfigurationChanged() in activity ...

    @Override      public void onConfigurationChanged(Configuration        newConfig)     {       super.onConfigurationChanged(newConfig);     } 
 
 
     
     

Relacionados problema

34  ClassNotFoundException Cuando Desmarshalling: android.support.v4.view.viewpager $ SavedState  ( Classnotfoundexception when unmarshalling android support v4 view viewpagersav ) 
Estoy viendo el siguiente error en My Android Crash Reports: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support....

1  Parcelable con la Lista de Array <String> Valor que pasa de la actividad a Fragment Android  ( Parcelable with arrayliststring passing value from activity to fragment androi ) 
Necesito enviar un valor de arraylist del fragmento a la actividad. He intentado con pocos códigos, pero el valor de retorno es NULL.Ayuda Ayuda con el código...

1  Implementación parcelable que no funciona. La aplicación todavía hace llamadas de red en la rotación del dispositivo  ( Parcelable implementation not working app still makes network calls on device r ) 
Tengo un fragmento en el que estoy haciendo llamadas de red a una API. Mi modelo implementa parcelable para guardar el estado en la rotación del dispositivo...

1  Haz que Arraylist <Arraylist <Integer >> parcelable  ( Make arraylistarraylistinteger parcelable ) 
Estoy tratando de hacer que la siguiente clase parcelable. Por lo general, hago esto usando el sitio web de Parcelabler. Pero el sitio web parece tener proble...

69  Android: ¿Cómo pasar parcelable objeto de la intención y el método de usar getParcelable del paquete?  ( Android how to pass parcelable object to intent and use getparcelable method of ) 
¿Por qué el paquete tiene 99887776612 , function getSelectedLayersIdx(){ var selectedLayers = new Array; var ref = new ActionReference(); ref.p...

0  Error al desempacar un tipo de datos personalizado de una parcela en Android  ( Error with unpacking a custom data type from a parcel in android ) 
Tengo este problema de recrear una matriz de un tipo de datos personalizado después de que se escribió en una parcela. Playwear se declara como tal: priv...

36  Pruebas de la unidad de Android: paquete / parcelable  ( Android unit testing bundle parcelable ) 
¿Cómo es parcelable la prueba de la unidad? Creé una clase parcelable, y escribí esta prueba de la unidad TestClass test = new TestClass(); Bundle bundle =...

-1  Parcelable de clase anidada [duplicado]  ( Nested class parcelable ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo puede una clase Java no tiene un constructor NO-ARG? ...

0  Envío de intención con una parcelable extra desde el widget se bloquea en la puesta en marcha de la actividad  ( Sending intent with a parcelable extra from widget crashes on activity startup ) 
Tengo un widget que contiene pocos botones. Cuando se presiona, cada botón se abre mi aplicación principal y le envía un objeto diferente. Los objetos se tran...

0  Filtrar en la lista de listas personalizadas con múltiples vistas de texto utilizando un filtro en un ArrayAdapter <T implementa Parcelable>  ( Filtering custom listview with multiple textviews using a filter on an arrayadap ) 
Tengo una clase class CustomAdapter extends ArrayAdapter<CustomListItem> , donde 9988777661 , y tiene 3 variables de cadena ( String a, b, c; ) Todo está ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos