您應該延伸BaseAdapter,併爲每個項目提供自己的佈局(getView())。不要忘記管理視圖回收,也許使用ViewHolder範例。
編輯
我沒有使用很多ListAdpater,因爲它綁定到只有一個ListView。有時我需要一個GridView適配器,並且BaseAdapter爲我提供了足夠的自由度來適用於所有用例。 BaseAdapter的
實施例:
<ListView
android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:cacheColorHint="@android:color/transparent" />
這樣:
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)一個活動使用它,你ListActivity將膨脹的觀點就能做出findViewById()調用和getListView()將返回這個內部的ListView。這是一個小小的破解,你可以把你自己的listView與另一個id並自己做findViewById()。對於ListActivity,還有另一種破解:如果ListActivity發現再次與一個特殊的ID空視圖,它會顯示在列表爲空:
<include
android:id="@+id/empty"
layout="@layout/empty"
android:visibility="gone"
android:layout_gravity="center" />
然後在你的ListView,無論你使用的活動或ListActivity ,你可以在設置的ListView適配器:
在
getView(...)
方法
getListView().setAdapter(new FanAdapter(this, myFanDataArray)));
在我看來,自定義'ArrayAdapter'並覆蓋'getView() '將是您的案例中選擇的最佳選擇。 – Nishant
@Thanks Nishant ...我也做了完全一樣的... – aProgrammer