getView 中直接將 convertView 強轉為 TextView,導致 ClassCastException: LinearLayout cannot be cast to TextView。
convertView 是整個 Item 的根佈局(如 LinearLayout),而非單一 TextView。首次創建時需 inflate 完整 Item 佈局,複用時再 findViewById 取得子控件。
// 1. 定義 Item 佈局 listview_cell.xml
// 根佈局 LinearLayout 包含一個 TextView (id: textView)
static class ViewHolder {
TextView textView;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = LayoutInflater.from(context).inflate(R.layout.listview_cell, parent, false);
holder = new ViewHolder();
holder.textView = convertView.findViewById(R.id.textView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.textView.setText("Position " + position);
return convertView;
}
LinearLayout/RelativeLayout/ConstraintLayout。convertView != null 時直接取 Tag,避免重複 findViewById。