`getCount()` 返回 `imgs.length` 時崩潰 → `imgs` 為 `null` 或未初始化。
public MyAdapter(Context context, int resource, String[] names, int[] imgs) {
super(context, resource);
this.names = names;
this.imgs = imgs;
}
@Override public int getCount() {
return imgs == null ? 0 : imgs.length;
}
@Override public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item, parent, false);
holder = new ViewHolder();
holder.iv = convertView.findViewById(R.id.imageView);
holder.tv = convertView.findViewById(R.id.textView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.iv.setImageResource(imgs[position]);
holder.tv.setText(names[position]);
return convertView;
}
static class ViewHolder { ImageView iv; TextView tv; }
| 錯誤寫法 | 後果 | 正確寫法 |
|---|---|---|
| `inflater.inflate(R.layout.item, null)` | LayoutParams 丟失,佈局參數失效 | `inflate(layout, parent, false)` |
| 不使用 ViewHolder 每次 findViewById | 滑動卡頓,GC 頻繁 | ViewHolder 模式 / ViewBinding |
| 數組未在構造器傳入 | NullPointerException | 構造器強制要求數據源 |
掌握 Adapter 三大核心(`getCount`、`getView`、數據源管理)+ ViewHolder,是 Android 列表開發的入門必修課。