Aller au contenu

Utilisation de BaseAdapter, erreur lors de l'exécution


Flowcki

Recommended Posts

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

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

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

ç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

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...