मैं रीसाइक्लर व्यू.एडाप्टर का उपयोग कर रहा हूं लेकिन मैं अपनी विधि onCreateViewHolder
के काम के संबंध में थोड़ा उलझन में हूं।Android RecyclerView.Adapter onCreateViewHolder()
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if(viewType==TYPE_ITEM) {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_common_item, viewGroup, false);
ViewHolder vh = new ViewHolder(mView);
return vh;
} else {
View mView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.inflate_uncommon_item, viewGroup, false);
ViewHolderFooter vh = new ViewHolderFooter(mView);
return vh;
}
}
तो बैठाना मैं अपने सूची में 10 आइटम नहीं हैं तो प्रत्येक आइटम के लिए इस विधि बुलाया जाएगा और हर बार एक नई ViewHolder
यह करेंगे प्रत्येक दृश्य के लिए एक बार, लेकिन अब मेरे सवाल का जब है निश्चित रूप से बनाया जाएगा हम ListView
और BaseAdapter
का उपयोग कर रहे थे, हम टैग में ViewHolder
स्टोर करते हैं और इसका उपयोग करते हैं। हम प्रत्येक आइटम के लिए ViewHolder
नहीं बनाते हैं।
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyViewHolder mViewHolder;
if(convertView == null) {
convertView = inflater.inflate(R.layout.layout_list_item, null);
mViewHolder = new MyViewHolder();
convertView.setTag(mViewHolder);
} else {
mViewHolder = (MyViewHolder) convertView.getTag();
}
mViewHolder.tvTitle = detail(convertView, R.id.tvTitle, myList.get(position).getTitle());
mViewHolder.tvDesc = detail(convertView, R.id.tvDesc, myList.get(position).getDescription());
mViewHolder.ivIcon = detail(convertView, R.id.ivIcon, myList.get(position).getImgResId());
return convertView;
}
तो क्या हम अतिरिक्त दर्शकधारक वस्तु नहीं बना रहे हैं। कृपया मुझे पेशेवरों और विपक्ष को समझने में मदद करें।
धन्यवाद
तो इसका मतलब है कि यह प्रत्येक आइटम के लिए एक viewholder उत्पन्न करेंगे और फिर सूची के उस सेल के लिए हर बार उस धारक का उपयोग करें। सही? –
धन्यवाद गिल, मेरे पास RecyclerView.Adapter में एक और सवाल है लेकिन इसके लिए मैं स्टैक ओवरफ़्लो पर एक अलग प्रश्न डालूंगा। –
मैं कुछ दस्तावेज से गुज़र चुका हूं जो कि कर्टव्यूहोल्डर पर अमूर्त विधि के लिए उल्लिखित हैं। नया व्यूहोल्डर {@link #onBindViewHolder (ViewHolder, int)} का उपयोग करके एडाप्टर के आइटम प्रदर्शित करने के लिए उपयोग किया जाएगा। चूंकि इसे डेटा सेट में अलग-अलग आइटम प्रदर्शित करने के लिए फिर से उपयोग किया जाएगा, इसलिए अनावश्यक {@ लिंक देखें # findViewById (int)} कॉल से बचने के लिए दृश्य के उप दृश्यों के संदर्भ कैश करना एक अच्छा विचार है। तो हम सब दृश्यों के संदर्भ कैश कैसे कर सकते हैं? –