首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android ListView Adapter 優化:正確使用 convertView 避免類型轉換錯誤

     編輯:程式設計疑難解答

錯誤現象

getView 中直接將 convertView 強轉為 TextView,導致 ClassCastException: LinearLayout cannot be cast to TextView。

根本原因

convertView 是整個 Item 的根佈局(如 LinearLayout),而非單一 TextView。首次創建時需 inflate 完整 Item 佈局,複用時再 findViewById 取得子控件。

正確寫法:ViewHolder 模式

// 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;
}

關鍵點總結

  • Item 佈局必須是獨立 XML,根元素通常為 LinearLayout/RelativeLayout/ConstraintLayout。
  • convertView != null 時直接取 Tag,避免重複 findViewById。
  • 切勿將根佈局強轉為子控件類型。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved