¿Excepción de conversión de clase de adaptador al eliminar una vista de pie de página?

Tengo una excepción que nunca pensé que vería. Una excepción de conversión de clase del adaptador al eliminar una vista de pie de un ListView (sic).

java.lang.ClassCastException: com.test.MyAdapter at android.widget.ListView.removeFooterView(ListView.java:381) 

¿Cómo puede suceder esto? ¿Qué tiene que ver la eliminación de un pie de página con la clase cast excepción ????

La lista es un adaptador de varias listas, quizás por eso, pero sigue siendo una excepción de conversión de clase para eliminar un pie de página (sic).

Agregue su vista de pie de página a ListView antes de llamar setAdapter() método setAdapter() .

Adicional:

 public void addFooterView (View v) 

Desde: Nivel de API 1 Agrega una vista fija para que aparezca en la parte inferior de la lista. Si addFooterView se llama más de una vez, las vistas aparecerán en el orden en que se agregaron. Las vistas agregadas usando esta llamada pueden concentrarse si lo desean.

NOTA: Llame a esto antes de llamar a setAdapter. Esto es lo que ListView puede envolver el cursor suministrado con uno que también tendrá en cuenta las vistas de encabezado y pie de página.

Parámetros v La vista para agregar.

Fuente

También puede comprobar este post interesante .

Espero que esto ayude.

Este es un código para la respuesta anterior, funcionó en mi caso:

Tuve que establecer un footerView (es un loadingView en un listView con paginación) a mi listView antes de configurar su adaptador y luego eliminarlo. Primero inicialice mi loadingView de un archivo de disposición en método OnCreate:

 LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); loadingView = layoutInflater.inflate(R.layout.loading_view, null); 

Entonces utilicé esta solución en el mismo método:

 this.setIsLoading(true); listView.setAdapter(adapter); this.setIsLoading(false); 

Dónde

 private void setIsLoading(boolean isLoading) { this.isLoading = isLoading; if (isLoading) { listView.addFooterView(loadingView); } else { listView.removeFooterView(loadingView); } } 

El problema no proviene de removeFooterView() , sino de addFooterView() . Si lee la documentación, indica que se agregará un contenedor al adaptador:

Si el adaptador de ListView no amplía HeaderViewListAdapter, se envolverá con una instancia de soporte de WrapperListAdapter.

Por lo tanto, debe utilizar el getter para recuperar el adaptador envuelto y arrojarlo a su adaptador. Me gusta esto:

 ((MyAdapter) ((HeaderViewListAdapter) listView.getAdapter()).getWrappedAdapter()) 

Espero que esto te ayude con tu problema.

Atentamente,

Agregando a las otras respuestas, si estás agregando / quitando pie de página dinámicamente (como si alcanzan la parte inferior de tu lista y luego estás agregando una vista de pie de página) lo más fácil es setAdapter en tu ListView y agregar un nuevo Ver objeto como el pie de página allí, esto asegurará que el adaptador se envuelve en el HeaderViewListAdapter :

 @Override public void setAdapter(ListAdapter adapter) { addFooterView(new View(getContext())); super.setAdapter(adapter); } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.