studio recyclerview dinamico custom array activity android listview adapter

android - recyclerview - No se puede agregar la vista de encabezado a la lista-setAdapter ya se ha llamado



listview dinamico android studio (9)

Tengo un campo de texto de edición y un botón de "búsqueda". Cuando hago clic en buscar, tengo que mostrar una vista de lista con datos correspondientes a los valores ingresados ​​en el texto de edición. He agregado un encabezado a mi lista usando addHeader (). Cuando busco por primera vez, puedo mostrar datos en la lista con éxito. Pero cuando vuelvo a buscar, obtengo el siguiente error.

FATAL EXCEPTION: main java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. at android.widget.ListView.addHeaderView(ListView.java:261) at android.widget.ListView.addHeaderView(ListView.java:284)

He asignado un encabezado a mi lista antes de configurar el adaptador.

A continuación está mi código:

myList = (ListView) findViewById(R.id.searchResultsList); View header = View.inflate(this, R.layout.search_results_header, null); myList.addHeaderView(header, null, false); dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults); myList.setAdapter(dataAdapter);

Donde estoy haciendo mal?


No se puede agregar la vista de encabezado a la lista: ya se ha llamado a setAdapter. que puede ver, el myList.addHeaderView (encabezado) debe ejecutarse antes de myList.setAdapter (adaptador);


Prueba esto..

dataAdapter = new MyCustomAdapter(this, R.layout.results_list_item, searchedResults); myList.addHeaderView(header); myList.setAdapter(dataAdapter); dataAdapter.notifyDataSetChanged();


En Android 2.3, agregue el encabezado después de setAdapter (incluso si ha agregado antes, luego quitado) arrojará una excepción. Para ocultar o mostrar un encabezado dinámicamente, use setVisibility (). ¿Cómo? Puede ver Ocultar vistas de encabezado .


puede agregar FrameLayout como vista de encabezado antes de configurar el adaptador y agregar / eliminar dinámicamente la vista en FrameLaypout


Tuve el mismo problema hoy. Tengo varias ListViews. Con la información de la primera, crea la lista de la siguiente y todos han establecido Adaptador en ella. Para mí, la mejor solución fue poner

setListAdapter(null);

en la parte superior de la función, donde inflico el encabezado. Espero que esto ayude..


Si se utilizó android:entries en ListView en el archivo xml, se llama método setAdapter() antes de agregarHeaderView. Por lo tanto, elimine el atributo android:entries de ListView en el archivo de diseño xml. Será trabajo.


Después de tantos esfuerzos obtuve una solución para mi lado, espero que esto ayude a alguien también

ya configuré el adpater (después de la vista agregada) pero no sé por qué estaba sufriendo el mismo error, así que aquí hice algo como este código

// Set View here View view = getLayoutInflater().inflate(R.layout.navigation_header,null); mDrawerList.addHeaderView(view); // init your adapter adapter1 = new YourListAdapter(getApplicationContext(),blabla); // set adapter into handler Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { // TODO Auto-generated method stub mDrawerList.setAdapter(adapter1); } }, 100);

Puse mi adaptador en el manejador en algún momento en que el adaptador se configura más rápido que el código de vista para que yo pueda resolver esta excepción. :)


Después de establecer

final ViewGroup header = (ViewGroup) inflater.inflate(R.layout.item, listView, false); listView.addHeaderView(header, null, true);

antes de

listView.setAdapter(adapter);

un problema aún apareció. Luego hice Build> Clean Project.


He utilizado el siguiente código en mi aplicación de muestra para establecer un encabezado ListView:

ListView lv = getListView(); View headerView = getLayoutInflater().inflate(R.layout.layout_header, null, false); lv.addHeaderView(headerView); final TumblrDB db = new TumblrDB(this); c = db.query(); startManagingCursor(c); adapter = new CustomCursorAdapter(this, R.layout.layout_del, c, new String[]{TumblrDB.DATE, TumblrDB.DESC}, new int[]{R.id.txt_a, R.id.txt_b}); lv.setAdapter(adapter);