Flowcki Posté(e) 15 novembre 2010 Share Posté(e) 15 novembre 2010 Bonjour à tous, J'ai crée une listview personnalisé avec une class qui hérite de BaseAdapter et j'ai crée une class pour ajouter des données dans ma liste et à l'exécution j'ai une erreur dans le LogCat : nullPointerException sur mon activité principal (toute façon j'ai qu'une activité ^^) et l'erreur vient du setAdapter et je comprend pas pourquoi... j'ai mon layout main.xml avec un listview et un layout avec des textview pour afficher mes données mais rien n'y fait :(. Je vous donne mon code : class Personne package com.codiiz.BaseAdapter; import java.util.ArrayList; public class Personne { public String nom; public String prenom; public String description; public String img; public Personne(String aNom, String aPrenom, String aDescription){ nom = aNom; prenom = aPrenom; description = aDescription; } public static ArrayList<Personne> getPersonne(){ ArrayList<Personne> listPers = new ArrayList<Personne>(); listPers.add(new Personne("test", "test", "Blabla")); listPers.add(new Personne("test", "test", "Blabla")); listPers.add(new Personne("test", "test", "Blabla")); return listPers; } } class PersonneAdapter package com.codiiz.BaseAdapter; import java.util.List; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.LinearLayout; import android.widget.TextView; public class PersonneAdapter extends BaseAdapter { private List<Personne> mListP; private LayoutInflater mInflater; private Context mContext; public PersonneAdapter(Context context, List<Personne> aListP){ mContext = context; mListP = aListP; mInflater = LayoutInflater.from(mContext); } @Override public int getCount() { return mListP.size(); } @Override public Object getItem(int position) { return mListP.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { LinearLayout layoutItem; if(convertView == null){ layoutItem = (LinearLayout) mInflater.inflate(R.layout.personne, parent, false); } else{ layoutItem = (LinearLayout) convertView; } TextView nom = (TextView) layoutItem.findViewById(R.id.nom); TextView prenom = (TextView) layoutItem.findViewById(R.id.prenom); TextView description = (TextView) layoutItem.findViewById(R.id.description); nom.setText(mListP.get(position).nom); prenom.setText(mListP.get(position).prenom); description.setText(mListP.get(position).description); return layoutItem; } } Main package com.codiiz.BaseAdapter; import java.util.ArrayList; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class Main extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); ArrayList<Personne> listP = Personne.getPersonne(); PersonneAdapter adapter = new PersonneAdapter(this, listP); ListView listview = (ListView) findViewById(R.id.ListView01); listview.setAdapter(adapter); } } J'espère que vous pourrez m'aider. Merci d'avance. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flowcki Posté(e) 15 novembre 2010 Auteur Share Posté(e) 15 novembre 2010 J'ai finalement trouvé mais bon je comprend pas du tout ... j'ai copié collé le main.xml d'un tuto de developpez.com et ça fonctionne et pourtant j'avais le même XML donc je comprend absolument rien... si quelqu'un pouvait m'expliquer Voici mes 2 codes XML, celui du haut marche pas et celui du bas fonctionne : <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:text="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/ListView01" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </LinearLayout> Lien vers le commentaire Partager sur d’autres sites More sharing options...
cyrilbouisson@gmail.com Posté(e) 15 novembre 2010 Share Posté(e) 15 novembre 2010 Sur le XML du haut tu as : <ListView android:text="@+id/ListView01" Sur le XML du bas tu as : <ListView android:id="@+id/ListView01" Dans ton code tu as mis : ListView listview = (ListView) findViewById(R.id.ListView01); Dans ton code tu recherches ta liste via son ID donc le XML du haut ne marche pas car ce n'est pas la propriété ID de la liste qui est définie mais la propriété TEXT(c'est bien la cas par contre dans le XML du bas) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Flowcki Posté(e) 15 novembre 2010 Auteur Share Posté(e) 15 novembre 2010 Waouhhhhhh OMG et dire que j'ai cherché pour une propriété... Bah merci quand même :) La prochaine fois je relirais 10x Mais pourquoi le ListView listview = (ListView) findViewById(R.id.ListView01); n'était pas signalé comme une erreur ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 16 novembre 2010 Share Posté(e) 16 novembre 2010 ça ressemble à un bug louche dans le gestionnaire de ressource :P android:text="@+id/ListView01" va créer l'id, puis affecter l'entier généré au texte. ce n'est pas logique, ça marche à la compilation, mais ça plante à l'exécution, normal ListView listview = (ListView) findViewById(R.id.ListView01); compile bien, c'est normal :D R.id.ListView01 est bien déclaré findViewById te retourne une View, et le cast ne pose pas de problème Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.