Creer un adaptateurs personnalisés avec BaseAdapter [Résolu]

Signaler
Messages postés
83
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
23 août 2020
-
Messages postés
83
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
23 août 2020
-
Bonjour a tous,

je cherche à créer une liste de vues personnaliser, mais j'ai un peu de mal à comprendre comment tout cela fonctionne et la seul chose que je parviens à obtenir c'est une page blanche.

Voici mon code:

Tout d'abord le xml:
le fichier activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/vuePrincipal">

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView"/>

</LinearLayout>


le fichier vue.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/vueList">

    <TextView
        android:id="@+id/nomPrenom"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <TextView
        android:id="@+id/numTel"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:contentDescription="image"/>
</LinearLayout>


ensuite le code java:

package fr.adaptateurperso;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;

public class AdaptateurPerso extends Activity
{
    protected void onCreat(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        ListView list = (ListView) findViewById(R.id.listView);

        int vue = R.layout.activity;
        setContentView(vue);

        RepertoireAdapter adapter = new RepertoireAdapter(this);
        list.setAdapter(adapter);
    }
}


package fr.adaptateurperso;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class RepertoireAdapter extends BaseAdapter
{
    private int[] tab_images_pour_la_liste = {
            R.drawable.maman, R.drawable.mami,
            R.drawable.manif, R.drawable.papi, R.drawable.phare};

    private String[] valeurNom = new String[] { "maman",
            "mamie", "manif", "papi", "phare"},
                     valeurNum = new String[]{"111111", "2222222", "3333333", "4444444", "55555555"};

    private Context contexte;

    public RepertoireAdapter(Context contexte)
    {
        super();
        contexte = contexte;
    }

    @Override
    public int getCount()
    {
        return tab_images_pour_la_liste.length;
    }

    @Override
    public Object getItem(int position)
    {
        return tab_images_pour_la_liste[position];
    }

    @Override
    public long getItemId(int position)
    {
        return position;
    }


    LayoutInflater inflater;

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

        if(convertView == null)
        {
            convertView = inflater.inflate(R.layout.vue, null);

            holder = new ViewHolder();
            holder.nom = (TextView) convertView.findViewById(R.id.nomPrenom);
            holder.num = (TextView) convertView.findViewById((R.id.numTel));
            holder.photo = (ImageView) convertView.findViewById(R.id.imageView);

            convertView.setTag(holder);
        }
        else
        {
            holder.nom.setText(valeurNom[position]);
            holder.num.setText(valeurNum[position]);
            holder.photo.setImageResource(tab_images_pour_la_liste[position]);
        }

        return convertView;
    }

    static class ViewHolder
    {
        public TextView nom,
                        num;
        public ImageView photo;
    }
}


Voila, un grand merci à celui ou celle qui saura m'explique comment créer un adaptateur personnalisé correctement.
Configuration: Linux / Firefox 79.0

2 réponses

Messages postés
83
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
23 août 2020
1
Bonjour, je reviens vers vous après avoir corrigé quelque erreurs dans le onCreate()

public class AdaptateurPerso extends Activity
{
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        int vue = R.layout.activity;
        setContentView(vue);
        
        ListView list = (ListView) findViewById(R.id.listView);

        RepertoireAdapter adapter = new RepertoireAdapter(this);
        list.setAdapter(adapter);
    }
}


Apres correction, j'obtiens cette erreur:
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.LayoutInflater.inflate(int, android.view.ViewGroup)' on a null object reference
at fr.adaptateurperso.RepertoireAdapter.getView(RepertoireAdapter.java:62)



je ne comprend pas pourquoi je me retrouve avec un LayoutInflater à null??
Messages postés
83
Date d'inscription
samedi 2 août 2014
Statut
Membre
Dernière intervention
23 août 2020
1
Bien j'ai finalement trouve comment faire ce que je voulais. Ce monologue aura donc été profitable

Voici la solution au cas ou il y en d'autre qui galèrent comme moi:

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/vuePrincipal">
 
    <TextView
        android:id="@+id/nomPrenom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="dfdgdfgdfhghf"/>
 
    <TextView
        android:id="@+id/numTel"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/nomPrenom"
        android:text="113543643648"/>
 
    <ImageView
        android:id="@+id/imageView"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:layout_marginLeft="6dp"
        android:layout_marginRight="6dp"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="5dp"
        android:contentDescription="image"
        android:src="@drawable/sourir"
        android:layout_alignParentRight="true"/>
 
    <ListView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/listView"
        android:background="@color/colorAccent"/>
</RelativeLayout>


la class MainActivity:

package fr.adaptateurperso;
 
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
 
import java.util.ArrayList;
 
 
public class MainActivity extends Activity
{
    private ArrayList<Contact> listContact;
    private int[] image = {
            R.drawable.sourir, R.drawable.heureux,
            R.drawable.clin_oeil};
    private String[] valeurNom = new String[] { "maman",
            "mamie", "papi",},
            valeurNum = new String[]{"111111", "2222222", "3333333"};
 
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        int vue = R.layout.activity_main;
        setContentView(vue);
 
        ListView list = (ListView) findViewById(R.id.listView);
 
        listContact = new ArrayList<Contact>();
        for(int i=0; i<3; i++)
        {
            listContact.add(new Contact(valeurNom[i],valeurNum[i], image[i]));
        }
 
        RepertoireAdapter adapter = new RepertoireAdapter(this, listContact);
        list.setAdapter(adapter);
    }
}


la class RepertoirAdapter:

package fr.adaptateurperso;
 
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
import java.util.ArrayList;
 
public class RepertoireAdapter extends BaseAdapter
{
    private Context contexte;
    private ArrayList<Contact> contact;
 
    public RepertoireAdapter(Context contexte, ArrayList<Contact> contact)
    {
        super();
        this.contexte = contexte;
        this.contact = contact;
    }
 
    @Override
    public int getCount()
    {
        Log.i("getCount() => ", String.valueOf(contact.size()));
        return contact.size();
    }
 
    @Override
    public Object getItem(int position)
    {
        Log.i("getItem() => ", String.valueOf(contact.get(position)));
        return contact.get(position);
    }
 
    @Override
    public long getItemId(int position)
    {
        Log.i("getItemId => ", String.valueOf(position));
        return position;
    }
 
 
    LayoutInflater inflater;
    ViewHolder holder = null;
 
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        ViewHolder holder = null;
 
        if(convertView == null)
        {
            convertView = LayoutInflater.from(contexte).inflate(R.layout.activity_main, null);
 
            holder = new ViewHolder();
            holder.nom = (TextView) convertView.findViewById(R.id.nomPrenom);
            holder.num = (TextView) convertView.findViewById((R.id.numTel));
            holder.photo = (ImageView) convertView.findViewById(R.id.imageView);
 
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
 
        Contact c = (Contact) getItem(position);
        if(c != null)
        {
            holder.nom.setText(c.getNom());
            holder.num.setText(c.getNum());
            holder.photo.setImageResource(c.getImage());
        }
 
        return convertView;
 
    }
 
    static class ViewHolder
    {
        public TextView nom,
                        num;
        public ImageView photo;
    }
}


et pour finir la class Contact:

package fr.adaptateurperso;
 
public class Contact
{
    private String nom,
                   num;
    private int image;
 
    public Contact(String nom, String num, int image)
    {
        this.nom = nom;
        this.num = num;
        this.image = image;
    }
 
    public String getNom()
    {
        return nom;
    }
 
    public String getNum()
    {
        return num;
    }
 
    public int getImage()
    {
        return image;
    }
}


Voila comme ça marche!!!!!
Merci à moi!!!