2012-12-30 34 views
13

Tôi đang cố gắng triển khai ViewHolder trong ứng dụng Android của mình, nhưng tôi tiếp tục nhận được ViewHolder đó không thể được giải quyết thành loại, mà không có bất kỳ đề xuất nào để nhập. Bất cứ ai biết làm thế nào để có được xung quanh này?Android: Triển khai ViewHolder

+0

Đây là ví dụ điển hình về ViewHolder http://smr-android.blogspot.ru/2014/04/implementing-listview-with-swipe.html –

Trả lời

28

Đó là vì ViewHolder không phải là một lớp học là từ SDK Android, bạn tự làm. Dựa trên những gì tôi có thể find, một ViewHolder là một triển khai lưu trữ lượt xem (mỗi hàng trong một ListView thường) cho một khu vực lớn hơn, do đó, nó là một loại lớp trợ giúp và cơ chế bộ nhớ cache. Đây là một trong số example Tôi tìm thấy trên các Nhà phát triển Android về những gì mà ViewHolder sẽ chứa.

static class ViewHolder { 
    TextView text; 
    TextView timestamp; 
    ImageView icon; 
    ProgressBar progress; 
    int position; 
} 

Sau đó, bạn có thể triển khai trong ListAdapter hoặc một lớp tương tự.

+0

Trang # 36: http://www.slideshare.net/arslantumbin/performance-optimization-for-android-32797106 –

1
**Create a Holder class** 

protected static class ViewHolderItems 
{ 
    private ImageView mStoreImage; 
    private TextView mStoreName; 
} 

And use In getView method of adapter 

public View getView(int position, View convertView, ViewGroup parent) { 

     ViewHolderItems viewHolder; 
     if (inflater == null) 
      inflater = (LayoutInflater) activity 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.coupen_row, null); 
      viewHolder = new ViewHolderItems(); 
      viewHolder.mStoreImage = (ImageView) convertView.findViewById(R.id.storeImage); 

      viewHolder.mStoreName = (TextView) convertView.findViewById(R.id.storeName); 

      convertView.setTag(viewHolder); 

     } 
     else 
     { 
      viewHolder = (ViewHolderItems) convertView.getTag(); 
     } 

     return convertView; 
    } 
0

Có thể bạn đang tìm kiếm RecyclerView.ViewHolder là một phần của lib hỗ trợ Android.

Giống như mã từ liên kết này gist by Paul Burke

public static class ItemViewHolder extends RecyclerView.ViewHolder implements 
     ItemTouchHelperViewHolder { 

    public final TextView textView; 
    public final ImageView handleView; 

    public ItemViewHolder(View itemView) { 
     super(itemView); 
     textView = (TextView) itemView.findViewById(R.id.text); 
     handleView = (ImageView) itemView.findViewById(R.id.handle); 
    } 

    @Override 
    public void onItemSelected() { 
     itemView.setBackgroundColor(Color.LTGRAY); 
    } 

    @Override 
    public void onItemClear() { 
     itemView.setBackgroundColor(0); 
    } 
} 

này sẽ có ý nghĩa dành cho bạn nếu bạn đang làm việc với một Android RecyclerView

Trong trường hợp này họ cần một đối tượng để giữ quan điểm để nó có thể được lấp đầy với nội dung khi cần thiết.

Các vấn đề liên quan