基本上,您可以在您的活动中实现一个简单的 listView,但使用您自己创建的特殊 BaseAdapter(从 BaseAdapter 扩展)。
你可以像这样将你的列表作为第二个参数:
package com.example.joignabilite;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;
public class ContactAdapter extends BaseAdapter {
// The list of contact
private List<Contact> mListP;
//COntexte of the adapter
private Context mContext;
//Mecanism to manage graphism from xml file
private LayoutInflater mInflater;
private int white = 0xFFFFFFFF;
private int grey = 0x33000000;
public ContactAdapter(Context context, List<Contact> aListP) {
mContext = context;
mListP = aListP;
mInflater = LayoutInflater.from(mContext);
}
public int getCount() {
return mListP.size();
}
public Object getItem(int position) {
return mListP.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout layoutItem;
//(1) : Réutilisation des layouts
if (convertView == null) {
//Initialisation de notre item à partir du layout XML "Contact_layout.xml"
layoutItem = (LinearLayout) mInflater.inflate(R.layout.item_contact, parent, false);
} else {
layoutItem = (LinearLayout) convertView;
}
//(2) : Récupération des TextView de notre layout
TextView tv_Nom = (TextView)layoutItem.findViewById(R.id.repertoire_item);
//(3) : Renseignement des valeurs
tv_Nom.setText(mListP.get(position).nom);
//On mémorise la position de la "Contact" dans le composant textview
tv_Nom.setTag(position);
if(position % 2 == 0)
layoutItem.setBackgroundColor(grey);
else
layoutItem.setBackgroundColor(white);
//On ajoute un listener
tv_Nom.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//Lorsque l'on clique sur le nom, on récupère la position du "Contact"
Integer position = (Integer)v.getTag();
//On prévient les listeners qu'il y a eu un clic sur le TextView "TV_Nom".
sendListener(mListP.get(position), position);
}
});
//On retourne l'item créé.
return layoutItem;
}
/**
* Interface pour écouter les évènements sur le nom d'une Contact
*/
public interface ContactAdapterListener {
public void onClickNom(Contact item, int position);
}
//Contient la liste des listeners
private ArrayList<ContactAdapterListener> mListListener = new ArrayList<ContactAdapterListener>();
/**
* Pour ajouter un listener sur notre adapter
*/
public void addListener(ContactAdapterListener aListener) {
mListListener.add(aListener);
}
private void sendListener(Contact item, int position) {
for(int i = mListListener.size()-1; i >= 0; i--) {
mListListener.get(i).onClickNom(item, position);
}
}
}