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:
- Cómo detectar Android ListView Scrolling se detuvo?
- Error de Android - getListView () en ListFragment
- Imágenes remotas en un ListView con el patrón ViewHolder
- Biblioteca de cargador de imágenes universal está actuando lento en Android 5.0 en comparación con Android 4.4.4
- ListView cargar más en la parte inferior de desplazamiento
//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 !
- Listview se bloquea en modo retrato cuando se hace clic en elementos (con fragmentos)
- Devolución de llamada a notifyDataSetChanged
- Android personalizado ArrayAdapter método getView llamado varias veces - restablecer valor dinámico TextView
- Cómo mantener la posición de desplazamiento de listview cuando se actualiza
- SearchView en ListView con un adaptador personalizado
- Añadir 2 listview en el cajón de navegación, sólo uno funciona
- Establezca onItemClick en Adaptador personalizado ListView
- ¿Cómo hacer que los elementos se puedan hacer clic en la vista de lista?
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! 🙂
- Ionic push Android push notificación que devuelve "undefined" mensaje
- RTSP Streaming se detiene después de algún tiempo