तो जाने-माने ViewHolder आमतौर पर उपयोग करते हुए पैटर्न (ListAdapter) की तरह दिखता है:बारे ListView में ViewHolder पैटर्न कार्यान्वयन अनुकूलन
...
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final Album album = albums.get(position);
ViewHolder viewHolder = null;
if (convertView==null){
convertView = inflater.inflate(R.layout.albums_list_item, null);
final ImageView albumImage = (ImageView) convertView.findViewById(R.id.album_icon);
final TextView txtTitle = (TextView) convertView.findViewById(R.id.album_title);
final TextView txtDescription = (TextView) convertView.findViewById(R.id.album_copyright);
viewHolder = new ViewHolder();
viewHolder.albumImage = albumImage;
viewHolder.txtTitle = txtTitle;
viewHolder.txtDescription = txtDescription;
convertView.setTag(viewHolder);
}
else
viewHolder = (ViewHolder)convertView.getTag();
viewHolder.txtTitle.setText(album.getTitle(locale));
viewHolder.txtDescription.setText(album.getCopyrightInfo(locale));
...
return convertView;
}
जबकि ViewHolder वर्ग आमतौर पर ऐसा दिखता है:
static class ViewHolder{
public ImageView previewImage;
public TextView txtTitle;
public TextView txtDescription;
}
मेरे सवालों का ViewHolder कार्यान्वयन के बारे में है।
1) यह हर क्षेत्र को शुरू करने के बजाय कन्स्ट्रक्टर का उपयोग क्यों नहीं करता है?
2) यह सुरक्षित के बजाय डिफ़ॉल्ट पहुंच प्रकार का उपयोग क्यों करता है (वास्तव में इसे निजी होना चाहिए लेकिन यह जेआईटी द्वारा बनाए गए स्थिर एक्सेसर्स के कारण प्रदर्शन को प्रभावित करता है)? खैर, मुझे लगता है कि यह केवल विरासत के बारे में है।
protected static class ViewHolder{
public final ImageView previewImage;
public final TextView txtTitle;
public final TextView txtDescription;
public ViewHolder (final ImageView previewImage, final TextView txtTitle, final TextView txtDescription){
this.previewImage = previewImage;
this.txtTitle = txtTitle;
this.txtDescription = txtDescription;
}
}
और ListAdapter में केवल परिवर्तन है:
...
final TextView txtDescription = (TextView) convertView.findViewById(R.id.album_copyright);
viewHolder = new ViewHolder(albumImage, txtTitle, txtDescription);
convertView.setTag(viewHolder);
...
वैसे भी यह एक निर्माता कॉल करना होगा
तो क्यों निम्नलिखित पैटर्न बेहतर नहीं (छोड़कर "डिफ़ॉल्ट बनाम संरक्षित" पहुँच प्रकार) है। क्या यह सिर्फ स्वाद का मामला है? या यह संस्करण किसी भी तरह धीमा है या यह किसी तरह से प्रदर्शन को प्रभावित करता है?
धन्यवाद, वैसे ही मैं इसके बारे में सोच रहा हूं। – Stan