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