Android API 21 – vista de pie de página IndexOutOfBoundsException

Tengo un ListView en mi aplicación que utilizan un footerView. Mi código funciona bien en todos los dispositivos, excepto en los que tienen API 21: Tengo un IndexOutOfBoundsException. Mi ListView contiene un classment, y este classement se puede clasificar diferentemente vía un hilandero. Mi aplicación se bloquea cada vez que cambio el orden de mi clasificación por segunda vez.

Este es mi código en onCreate:

//ListView classement_listview = (ListView) findViewById(R.id.classement_listview); LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); footer_view = inflater.inflate(R.layout.classement_listview_footer, null); classement_listview.addFooterView(footer_view); classementAdapter = new ClassementAdapter(); classement_listview.setAdapter(classementAdapter); //Spinner Spinner spinner = (Spinner) findViewById(R.id.spinner_sort_by); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.classement_sort_by_entries, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); spinner.setOnItemSelectedListener(this); 

Esto es lo que hago en onItemSelected (el oyente del spinner)

  classement_listview.removeFooterView(footer_view); classementAdapter.clearUsers(); classement_viewflipper.setDisplayedChild(0); new Thread(new Runnable() { @Override public void run() { classementService.getClassement(ClassementActivity.this, typeClassement, countNbusers); } }).start(); 

Y aquí está el método que actualizar el ListView:

 @Override public void onClassementReceived(Classement classement) { if (classement == null) { classement_viewflipper.setDisplayedChild(2); return; } classement_viewflipper.setDisplayedChild(1); List<User> users = classement.getUsers(); classementAdapter.addUsers(users); this.countNbusers += users.size(); if (countNbusers >= classement.getNbMaxUsers()) { if (classement_listview.getFooterViewsCount() == 0) classement_listview.addFooterView(footer_view); } else classement_listview.removeFooterView(footer_view); classementAdapter.notifyDataSetChanged(); } 

Y este es el error:

 java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:255) at java.util.ArrayList.get(ArrayList.java:308) at android.widget.HeaderViewListAdapter.isEnabled(HeaderViewListAdapter.java:164) at android.widget.ListView.dispatchDraw(ListView.java:3307) at android.view.View.draw(View.java:15117) ... (etc) ... 

Gracias por tu ayuda !

Tuve el mismo problema y al hacer algunas pruebas me di cuenta de que esto sucede porque tengo dos invocaciones consecutivas a list.removeFooterView(mFooterView) , al igual que usted.

La primera vez que llamo a removeFooterView en mi método onResponse (onClassmentReceived en su caso) y luego lo llamo de nuevo dentro del método ScrollListener.onScroll (), que utilizo para saber cuándo cargar la siguiente página de datos.

Estoy trabajando para entender mejor por qué, pero la eliminación de la invokation en el método onScroll (), todo funciona bien en todos mis dispositivos de prueba. Por favor, hágamelo saber si esto funciona para usted también, así que tal vez podemos entender algo más! 🙂

  • Android: crea un LinearLayout que contiene un ListView desplazable
  • ¿Cómo implemento una lista seccionada en Android?
  • ¿Es posible obtener referencia a ListView de Adapter en Android?
  • Horizontal RecyclerView dentro de ListView sin desplazamiento muy suave
  • Cómo guardar y restaurar la posición de ListView en Android
  • ¿Cómo trabajar, cuando listview dentro del scrollview?
  • Rellenar Listview de JSON
  • El efecto Ripple no va por encima de ImageView
  • Listview con un adaptador personalizado que contiene CheckBoxes
  • Cómo mostrar listview personalizado utilizando fragmentos de lista en android
  • Cómo actualizar lista personalizada usando baseadapter en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.