Android: conflicto de ID cuando se crean 3 pestañas o más

Tengo una vista de pestañas en Android, y las pestañas comparten el mismo diseño xml, que se generan dinámicamente en base a JSON. Por ejemplo, si tengo un menú, creará una pestaña. Dos menús, dos pestañas. Y así. Como todas las pestañas se basan en el mismo objeto "Menú", comparten el mismo xml que se infla.

La construcción de las lengüetas va sin problemas. Cuando tienen una o dos pestañas, el cambio de estados y el deslizamiento se hace perfectamente. Al tener tres o más pestañas, pasar a la derecha está funcionando, pero cuando vuelvo a deslizar hacia la izquierda, obtengo este error:

java.lang.IllegalArgumentException: Wrong state class, expecting View State but received class android.widget.AbsListView$SavedState instead. This usually happens when two views of different type have the same id in the same hierarchy. This view's id is id/header_list_view. Make sure other views do not use the same id. 

Aquí está mi código onCreateView:

 public class MenuToListFragment extends Fragment { HeaderListView headerListView; // (most of the logic removed) @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_menu, container, false); headerListView = (HeaderListView) rootView.findViewById(R.id.header_list_view); return rootView; } } 

Y aquí está mi diseño xml:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="<removed>.DisplayMenus"> <com.applidium.headerlistview.HeaderListView android:id="@+id/header_list_view" android:layout_height="wrap_content" android:layout_width="wrap_content" /> </LinearLayout> 

¡Gracias por tu ayuda!

Muy bien, encontró el error! Usando el método OnActivityCreated, al llamar a HeaderListView, tuve que asignar una Id única usando headerListView.setId (); Para el valor de este id, tuve que pasar la posición de la ficha por un paquete, usando setArguments y getArguments. Una manera que no he explorado aún es generar un ID usando headerListView.setId (headerListView.generateViewId ()).

Ahora, sobre el "por qué" sucedió sólo cuando tener 3 vista o más. Aquí es donde estoy adivinando y me encantaría algunos comentarios. Al inflar una pestaña, encontré que sólo los vecinos se mantuvieron en la memoria (el otro son de alguna manera caído?). Si dos pestañas, pasando a la izquierda oa la derecha, el programa no generará ni restaurará las vistas, ya que el conjunto (ficha de uso del vecino) siempre será el mismo. Ahora, si tengo 3 pestañas y deslizar todo el camino a la derecha, la primera pestaña se pone a dormir. Volviendo a la segunda pestaña obliga a Android a restaurar la primera pestaña de su estado de reposo. Debido a que la pestaña sleeped tenía el mismo id que todos los demás, generaría un conflicto. Voila!

Espero que esto ayude a las personas a encontrar el mismo problema

Cambié la definición del diseño en:

 <com.applidium.headerlistview.HeaderListView android:layout_width="fill_parent" android:layout_height="fill_parent" android:tag="HeaderListView" /> 

Y luego encontrar la vista con la etiqueta:

 mHeaderListView = (HeaderListView) view.findViewWithTag("HeaderListView"); 

Parece que funciona, no más java.lang.IllegalArgumentException .

  • Cómo agregar etiquetas en XML en Android?
  • Crear lista de capas con esquinas redondeadas mediante programación
  • Cómo preservar las saltos de línea en los recursos xml <string> en Android?
  • Andorid cordova phonegap config.xml prefijo sin conexión
  • ¿El android string.xml soporta cualquier otra forma de xml?
  • Cambiar entre previsualización de referencia y valor de recursos de cadena en el editor xml
  • Cómo cambiar los valores xml de recursos de cadena en Android mediante programación?
  • LinearLayout no se puede convertir en android.widget.Button
  • Add Layout progamatically android
  • Android: Valor de cadena con nueva línea en XML
  • Conexión PhoneGap con el servicio localhost webservice
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.