Estoy usando ListActivity, listview.
listView = getListView();
Solo funciona perfectamente. Agregué la vista de pie de página como
LayoutInflater inflater = getLayoutInflater();
listView.addFooterView( inflater.inflate( R.layout.footer, null ), null, false);
y todo era brillante pero feo, así que quería agregar esta vista de pie de página (que contiene solo 1 texto de edición y solo 1 botón) al encabezado de listView as
LayoutInflater inflater = getLayoutInflater();
listView.addHeaderView( inflater.inflate( R.layout.footer, null ), null, false);
y de repente todo sale mal, y obtengo RuntimeException de inmediato.
Suspended(exception RuntimeException)
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent)
ActivityThread.access$2200(ActivityThread, Activity$ActiviyRecord, Intent),
so on..
¿Por qué arroja una excepción? ¿Qué es diferente entre addFooterView y addHeaderView, y cómo puedo agregar Header to ListActivity?
ACTUALIZAR
Como puede leer en los comentarios, mi logcat todavía no funciona, pero acabo de intentarlo en este momento:
} catch(Exception e){
Writer result = new StringWriter();
PrintWriter printWriter = new PrintWriter(result);
e.printStackTrace(printWriter);
String error = result.toString();
}
y luego puse el punto de interrupción, y puedo leer el error en la sección de expresiones. decía :
java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called.
Fue instructivo para todos nosotros. Después de cambiar el tipo de comandos, funciona de manera perfecta.
Respuestas
11 para la respuesta № 1Mientras te registras
java.lang.IllegalStateException: no se puede agregar la vista de encabezado a la lista - Ya se ha llamado a setAdapter.
Método de Listview addHeaderView o addFooterView debe ser llamado antes setAdapter.
0 para la respuesta № 2
Crear diseño xml para encabezado y pie de página
header_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="header"
/>
</RelativeLayout>
footer_layout.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="footer"
/>
</RelativeLayout>
ahora en actividad java file onCreate () método agregar
listView = (ListView) findViewById(R.id.listView1);
LayoutInflater inflater = getLayoutInflater();
ViewGroup header = (ViewGroup) inflater.inflate(R.layout.header, listView,
false);
ViewGroup footer = (ViewGroup) inflater.inflate(R.layout.footer, listView,
false);
listView.addHeaderView(header, null, false);
listView.addFooterView(footer, null, false);
listView.setAdapter(adapter);
-6 para la respuesta № 3
así que si desea agregar una vista de encabezado a su listView, debe hacerlo severamente antes de usar setListAdapter () o, de lo contrario, provocará una IllegalStateException.