BaseAdapterを拡張し、各アイテムに独自のレイアウトを提供する必要があります(getView())。ビューのリサイクルを管理することを忘れないでください。おそらくViewHolderパラダイムを使用してください。
編集
ListAdpaterはListViewにのみバインドされるため、あまり使用しませんでした。GridView用のアダプターが必要な場合がありますが、BaseAdapterを使用すると、すべてのユースケースに十分な自由度が得られます。
BaseAdapterの例:
public class FanAdapter extends BaseAdapter {
private List<Fan> mFans;
private Activity mContext;
public FanAdapter(Activity context, List<Fan> fans) {
mContext = context;
mFans = fans;
}
private class ViewHolder {
public ImageView image;
public TextView firstName;
public TextView lastName;
}
@Override
public View getView(int position, View view, ViewGroup container) {
if (view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.fan_item, container, false);
}
ViewHolder viewHolder = (ViewHolder) view.getTag();
if(viewHolder == null){
viewHolder = new ViewHolder();
viewHolder.image = (ImageView) view.findViewById(R.id.image);
viewHolder.firstName = (TextView) view.findViewById(R.id.firstname);
viewHolder.lastName = (TextView) view.findViewById(R.id.lastname);
view.setTag(viewHolder);
}
// setting here values to the fields of my items from my fan object
viewHolder.firstName.setText(fan.getFirstName());
(...)
return view;
}
@Override
public int getCount() {
if (mFans != null) {
return mFans.size();
} else {
return 0;
}
}
@Override
public Object getItem(int position) {
return mFans.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
}
ListViewまたはListActivityを含むアクティビティ(そのレイアウトに特別なIDを持つListViewを持っている)で使用できます。
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="@android:color/transparent" />
このようにして、ビューを拡張するListActivityはfindViewById()呼び出しを行うことができ、getListView()はこの内部listViewを返します。これは小さなハックです。別のIDを使用して独自のlistViewを配置し、findViewById()を自分で作成できます。ListActivityには、別のハックがあります。ListActivityが再び特別なIDを持つ空のビューを見つけた場合、リストが空のときに表示されます。
<include
android:id="@+id/empty"
layout="@layout/empty"
android:visibility="gone"
android:layout_gravity="center" />
次に、ListViewで、ActivityまたはListActivityのどちらを使用した場合でも、ListViewでアダプターを設定できます。
getListView().setAdapter(new FanAdapter(this, myFanDataArray)));