2010-07-05 13 views
3

Il y a quelque chose que je ne reçois tout simplement pas, et je cherche de l'aide pour comprendre ce qui se passe ici.Custom Listview Adapter, ajouter un pied de page statique, et comprendre R.id.list

J'ai un adaptateur de liste personnalisé (qui étend simplement BaseAdapter) que j'ai utilisé avec succès pour générer et afficher une liste. Maintenant, je veux ajouter un pied de page statique au bas de ma liste. Après avoir examiné un certain nombre de ressources (en particulier this one) je me suis rendu compte que ma réticence d'utiliser XML doit prendre fin, et mettre en place la mise en page XML suivant dans un fichier appelé devices_list.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="wrap_content" android:layout_height="wrap_content" 
android:orientation="vertical"> 
<LinearLayout android:id="@+id/bottom_control_bar" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true"> 
    <ToggleButton android:id="@+id/bottom_control_toggle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textOff="Filter Favourites OFF" 
     android:textOn="Filter Favourites ON"/> 
</LinearLayout> 
<ListView android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="0dip" 
    android:layout_above="@id/bottom_control_bar"> 
</ListView> 
<TextView android:id="@android:id/empty" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/main_empty_list" 
    android:layout_above="@id/bottom_control_bar"/> 
    </RelativeLayout> 

Après quelques ajustements à l'activité qui contient la liste, je courais le code. Je vois mon pied de page, (et le widget onglet qui est parent à tout), mais la zone où la liste est longue est vide.

@Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.devices_list); 

     db = new DbManager(this); 
     db.open(); 

     AllCur = db.fetchAllDevices(); 
     startManagingCursor(AllCur); 

     list = new DeviceListAdapter(this, AllCur); //make my custom list adapter     
     setListAdapter(list); 
      } 

Existe-t-il un moyen de lier le widget ListView déclaré dans mon fichier XML avec mon DeviceListAdapter? Il est clair pour moi maintenant que je ne suis pas entièrement sûr de la façon dont tout cela fonctionne. Toute aide à la clarification serait très appréciée.

+0

J'ai rencontré des problèmes similaires il y a quelques temps, et mon adaptateur était à l'origine du problème. Essayez le listview et affichez d'abord sur un tableau xml défini comme ressource, qui devrait s'afficher correctement. – Pentium10

+0

Je ne suis pas vraiment sûr de ce que vous suggérez ici - si j'ai un tableau xml alors cela ne m'aide pas vraiment car je veux utiliser mon adaptateur de tableau personnalisé qui utilise un curseur que je fournis. Pour les funsies, j'ai mis le XML que j'ai essayé de faire fonctionner dans l'exemple Notepad (qui utilise le SimpleCursorAdapter et quelques tableaux XML) et mon pied de page ne semblait pas poser de problème. Donc, basé sur cela, avez-vous des indications sur la façon dont votre adaptateur causait le problème? – Aurora

Répondre

1

Vous avez à la fois la ListView et l'ensemble TextView à android:layout_above="@id/bottom_control_bar", ce qui signifie que le TextView se chevaucher le ListView. Et, vous avez dit que votre taille ListView est 0dip, ce qui fera pour une liste extrêmement courte.

Je définirais le ListView comme étant au-dessus du TextView et ancré en haut de l'écran (android:layout_alignParentTop="true").

est-il un moyen de relier le widget ListView déclaré dans mon xml avec mon DeviceListAdapter?

Vous l'êtes déjà, en appelant setListAdapter().

+0

aha! L'android: layout_alignParentTop = "true" est ce qu'il a fait. Je suis retourné à mon exemple, surpris que je l'aie manqué, et ai réalisé qu'il n'était jamais là. Je pense que c'est parce que l'exemple que j'ai suivi place la liste entre un en-tête et un pied de page, alors que je place simplement le mien au-dessus d'un pied de page. La hauteur de ListView ne semble pas avoir d'importance une fois que l'alignement sur le parent est défini. – Aurora