2012-04-15 7 views
2

Ich benutze ListActivity, listview.Android - ListActivity, Kopf- und Fußzeile hinzufügen

listView = getListView(); 

funktioniert einfach perfekt. Ich habe Fußzeile Ansicht als

LayoutInflater inflater = getLayoutInflater(); 
listView.addFooterView(inflater.inflate(R.layout.footer, null), null, false); 

und alles glänzend war aber hässlich, so wollte ich diese Fußzeile Ansicht hinzufügen (nur 1 EditText und nur 1 Taste enthält) von Listview-Header als

LayoutInflater inflater = getLayoutInflater(); 
listView.addHeaderView(inflater.inflate(R.layout.footer, null), null, false); 

und plötzlich läuft alles schief und ich bekomme sofort RuntimeException.

Suspended(exception RuntimeException) 
ActivityThread.performLaunchActivity(ActivityThread$ActivityRecord, Intent) 
ActivityThread.handleLaunchActivity(ActivityThread$ActivityRecord, Intent) 
ActivityThread.access$2200(ActivityThread, Activity$ActiviyRecord, Intent), 
so on.. 

Warum wird die Ausnahme ausgelöst? Was unterscheidet AddFooterView und AddHeaderView und wie kann ich Header zu ListActivity hinzufügen?

UPDATE

So wie Sie in den Kommentaren lesen können, meine logcat immer noch nicht funktioniert, aber ich habe gerade versucht, nächste in diesem Moment:

} catch(Exception e){ 
    Writer result = new StringWriter(); 
    PrintWriter printWriter = new PrintWriter(result); 
    e.printStackTrace(printWriter); 
    String error = result.toString(); 
} 

und i Haltepunkt danach, und ich kann Fehler im Abschnitt Ausdrücke lesen. sie sagte:

java.lang.IllegalStateException: Cannot add header view to list -- setAdapter has already been called. 

es für uns alle lehrreich war. Nach dem Ändern von Befehlen funktioniert es perfected.

+0

@add f hier Logcat hier ... –

+0

Logcat funktioniert überhaupt nicht: S hat nie zu mir gearbeitet – Victor

+0

@Victor: "Logcat funktioniert überhaupt nicht: S hat nie zu mir gearbeitet" - Sie meinen Sie können nicht zugreifen die Logcat-Daten? Starten Sie einen beliebigen Emulator oder verbinden Sie ein Telefon mit dem PC und verwenden Sie DDMS in Eclipse und Sie werden sehen, dass jede laufende App Daten an logcat ausgibt. – Squonk

Antwort

-6

also, wenn Sie Header-Ansicht zu Ihrer ListView hinzufügen möchten, sollten Sie das streng vor der Verwendung von SetListAdapter() tun, oder es verursacht eine IllegalStateException.

+9

Sie beantworteten Ihre eigene Frage 2 Wochen, nachdem Anticafe die gleiche Antwort lieferte, nur um es als die richtige Antwort auszuwählen. Das ist überhaupt nicht im Sinne von SO. –

+1

Ja, wenn Sie Kommentare und Updates lesen, können Sie sehen, dass ich die Antwort selbst gefunden habe. Ich wollte die Frage beantworten, aber aufgrund meines schlechten Rufs konnte ich das nicht tun. Schließlich markierst du meine korrekte Antwort. Das ist überhaupt nicht im Geist von SO. – Victor

+0

Kein Sieger, du hast keinen Kommentar abgegeben, der das zuerst gesagt hat. Und selbst wenn Sie das täten, sollten Sie dankbar sein, dass jemand eine klare Antwort für Sie gab. –

11

Wie Sie sich

java.lang.IllegalStateException: Kann nicht Kopfansicht zur Liste hinzufügen - setAdapter wurde bereits aufgerufen.

Listview-Methode addHeaderView oder addFooterView muss vor setAdapter aufgerufen werden.

+0

yep, ich wollte die Antwort auch hinzufügen, aber ich muss 8 Stunden warten, um meine eigene Frage wegen meines niedrigen Rufs zu beantworten. – Victor

0

Erstellen von XML-Layout für Kopf- und Fußzeilen

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> 

jetzt in Aktivität Java-Datei onCreate() -Methode hinzufügen

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);