alexYop Posté(e) 14 janvier 2010 Share Posté(e) 14 janvier 2010 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.NullPointerExceptionat com.AndroTwit.TwitListAdapter.getView(TwitListAdapter.java:33) En mode debug, on s'appercoit que tvIem est toujours NULL. Ou ai je fais une erreur ? Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kuiplo Posté(e) 14 janvier 2010 Share Posté(e) 14 janvier 2010 Tu es bien sur que ton fichier "R.layout.twit_list_view" correspond à ton layout pour une ligne ? Plus haut tu met que ton layout pour une ligne est "twit_list_row". Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
alexYop Posté(e) 14 janvier 2010 Auteur Share Posté(e) 14 janvier 2010 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. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Kuiplo Posté(e) 14 janvier 2010 Share Posté(e) 14 janvier 2010 A force de passer des heures sur des erreurs à la con, tu commences à les connaitre par coeur ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.