/ / Android - ListActivity, agregue la vista de Encabezado y Pie de página - android, header, footer, listactivity

Android: ListActivity, agrega la vista de encabezado y pie de página: android, encabezado, pie de página, listactivity

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 № 1

Mientras 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.