/ / Android - ListActivity, ajouter une vue d'en-tête et de pied de page - Android, en-tête, pied de page, activité de liste

Android - ListActivity, ajouter les vues Header et Footer - Android, en-tête, pied de page, ListActivity

J'utilise ListActivity, listview.

listView = getListView();

fonctionne parfaitement. J'ai ajouté la vue de pied de page en tant que

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

et tout était brillant mais moche, donc je voulais ajouter cette vue de pied de page (qui ne contient qu'un seul edittext et un seul bouton) à l'en-tête de la liste

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

et tout à coup tout va mal, et j'obtiens immédiatement RuntimeException.

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

Pourquoi lance-t-il une exception? Quelle est la différence entre addFooterView et addHeaderView, et comment puis-je ajouter un en-tête à ListActivity?

METTRE À JOUR

Donc, comme vous pouvez le lire dans les commentaires, mon logcat ne fonctionne toujours pas, mais je viens d'essayer ensuite à ce moment:

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

et ensuite je mets un point d'arrêt, et je peux lire l'erreur dans la section des expressions. Ça disait :

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

c'était instructif pour nous tous. Après avoir changé le type de commandes, cela fonctionne parfaitement.

Réponses:

11 pour la réponse № 1

Au fur et à mesure que vous vous connectez

java.lang.IllegalStateException: impossible d'ajouter la vue d'en-tête à la liste - setAdapter a déjà été appelé.

Méthode de Listview addHeaderView ou addFooterView doit être appelé avant setAdapter.


0 pour la réponse № 2

Créer une mise en page XML pour l'en-tête et le pied de page

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>

maintenant dans le fichier java activité méthode onCreate () add

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 pour la réponse № 3

donc si vous souhaitez ajouter une vue d'en-tête à votre listView, vous devez le faire sérieusement avant d'utiliser setListAdapter () ou bien cela provoque une IllegalStateException.