Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Cách tạo Custom ListView trong Android (bản chi tiết)

Giới thiệu

Bài viết này lặp lại nội dung bài trước (ID 1003060804) với chi tiết tương tự về Custom ListView. Dưới đây là bản tóm tắt tối ưu.

Các thành phần chính

  1. Model: SubjectData (name, link, imageUrl).
  2. Layout item: list_row.xml (ImageView + TextView).
  3. Adapter: CustomAdapter implements ListAdapter (getView inflate layout, bind data).
  4. Activity: Khởi tạo data, setAdapter cho ListView.
  5. Thư viện ảnh: Picasso/Glide load ảnh từ URL.
  6. Permission: INTERNET trong Manifest.

Code chính (CustomAdapter.getView)

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    SubjectData data = arrayList.get(position);
    
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_row, parent, false);
    }
    
    TextView title = convertView.findViewById(R.id.title);
    ImageView image = convertView.findViewById(R.id.list_image);
    
    title.setText(data.SubjectName);
    Picasso.with(context).load(data.Image).into(image);
    
    return convertView;
}

Tối ưu: ViewHolder Pattern

static class ViewHolder {
    TextView title;
    ImageView image;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if (convertView == null) {
        convertView = LayoutInflater.from(context).inflate(R.layout.list_row, parent, false);
        holder = new ViewHolder();
        holder.title = convertView.findViewById(R.id.title);
        holder.image = convertView.findViewById(R.id.list_image);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    
    SubjectData data = arrayList.get(position);
    holder.title.setText(data.SubjectName);
    Picasso.with(context).load(data.Image).into(holder.image);
    
    return convertView;
}

Kết quả

Cách tạo Custom ListView trong Android (bản chi tiết)

Lưu ý

  • Bài viết này trùng lặp với ID 1003060804 - nên gộp hoặc tham chiếu.
  • Luôn dùng parent, false trong inflate() để tránh layout params sai.
  • ViewHolder bắt buộc để tránh findViewById lặp lại - hiệu năng.
  • Hiện nay **RecyclerView + ViewHolder** là chuẩn, ListView ít dùng.