Aller au contenu

Créer sa listView avec un ArrayAdapter et en surchargeant getView


alexYop

Recommended Posts

Bonjour,

Je souhaiterais créer une list View toute bete avec un ArrayAdapter.

Mon problème est : J'obtiens une erreur quand je fais mon affectation à mon champs "text" (champs unique de chaque ligne de ma listView)

Je vais essayer de donner mon code le plus clairement possible

Chaque ligne est composé d'un seul champ :

twit_list_row.xml

<?xml version="1.0" encoding="utf-8"?>
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content">

       android:id="@+id/text" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content"         
       android:text="@string/buttonValue">



Mon listView se trouve dans mon fichier principal main.xml avec d'autres champs

main.xml

......

           android:id="@android:id/android:list"
           android:isScrollContainer="true" 
           android:scrollbars="vertical"                        
           android:layout_weight="60"
           android:layout_height="fill_parent" 
           android:layout_width="fill_parent"            

       />
....

Mon fichier Java principal avec l'activité ou j'appelle l'adaptater :

public class AndroTwit extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
       ...
       ArrayList listRow = new ArrayList();
       listRow.add(new Twit("titre1"));
       listRow.add(new Twit("titre2"));
       listRow.add(new Twit("titre3"));


       // la liste View se trouvant dans main.xml
       ListView mRecetteList = (ListView) findViewById(android.R.id.list);


       mRecetteList.setAdapter(
           new TwitListAdapter(
               this,  
               R.layout.twit_list_row, //=> le layout représentant la ligne 
               listRow //=> les données
       ));
       ...
}

Chaque ligne de ma listView ne contient qu'un seul, j'ai donc créé une javaBean avec un seul attribut :

Twit.java

package com.AndroTwit;
public class Twit {
   private String text;
   public Twit(String title) {
       super();
       this.text = title;
   }
   public String getTitle() {
       return text;
   }
   public void setTitle(String title) {
       this.text = title;
   }    
}

Je me suis créé mon propre adapter en surchargeant getView

public class TwitListAdapter extends ArrayAdapter {

    public TwitListAdapter(Context context, int textViewResourceId, List objects) {
           super(context, textViewResourceId, objects);        
       }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;

           if (view == null)
           {            
               LayoutInflater li = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
               //le layout représentant la ligne dans le listView
               view = li.inflate(R.layout.twit_list_view, null); 
           }         
           Twit twit = getItem(position);
           if (twit != null)
           {
               //Récupération de la référence du champs "text" du layout représentant une ligne
               // Problème ICI, tvIem toujours null
               TextView tvIem = (TextView)view.findViewById(R.id.text); 

               tvIem.setText(twit.getTitle()); ==> ligne 33 (c'est la ou cela plante)
           }

        return view;

    }
}

J'obtiens l'erreur suivante :

java.lang.NullPointerException

at com.AndroTwit.TwitListAdapter.getView(TwitListAdapter.java:33)

En mode debug, on s'appercoit que tvIem est toujours NULL.

Ou ai je fais une erreur ?

Lien vers le commentaire
Partager sur d’autres sites

Kuiplo, chapeau bas.

C'était effectivement cela.

Dans ma class TwitListAdapter, je surcharge mon Adapater. Cela signifie que cette classe s'occupe de la configuration des lignes de ma listView.

J'aurais donc pu revérifier le bon pointage vers le layout de la ligne et non pas listView.

Merci bcp.

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...