BaseAdapter中getView方法如何編寫正確?
?
老師的代碼?寫法如下:
public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{???????? ????ViewHolder?viewHolder?=?null;???????? ????if?(convertView?==?null){???????????? ????????viewHolder?=?new?ViewHolder();???????????? ????????convertView?=?mInflater.inflate(R.layout.item_layout,null);???????????? ????????viewHolder.ivIcon?=?(ImageView)?convertView.findViewById(R.id.iv_icon); ???? ????/***************************(老師版本)這三行代碼放這里?Start********************************/??????? ????????String?url?=?mList.get(position).newsIconUrl;???????? ????????viewHolder.ivIcon.setTag(url);???????? ????????mImageLoader.showImageByAsyncTask(viewHolder.ivIcon,?url); ????/*************************(老師版本)這三行代碼放這里?End***********************************/ ???? ????????viewHolder.tvTitle?=?(TextView)?convertView.findViewById(R.id.tv_title);???????????? ????????viewHolder.tvContent?=?(TextView)?convertView.findViewById(R.id.tv_content);???????????? ????????convertView.setTag(viewHolder);???????? ????}?else?{???????????? ????????viewHolder?=?(ViewHolder)?convertView.getTag();???????? ????}???????? ????viewHolder.ivIcon.setImageResource(R.mipmap.ic_launcher); ????viewHolder.tvTitle.setText(mList.get(position).newsTitle);???????? ????viewHolder.tvContent.setText(mList.get(position).newsContent);???????? ????return?convertView;???? }
按照老師的寫法程序在滾動時奔潰,我Debug找到的崩潰地點是: ImageLoader類中的loadImages函數中的:
// 通過URl找到imageView
ImageView imageView = (ImageView) mListView.findViewWithTag(url);?//此處崩潰!!!?提示findViewWithTag無法找到ImageView!
imageView.setImageBitmap(bitmap);
?修改成下面的方式(移動3行代碼):
public?View?getView(int?position,?View?convertView,?ViewGroup?parent)?{???????? ????ViewHolder?viewHolder?=?null;???????? ????if?(convertView?==?null){???????????? ????????viewHolder?=?new?ViewHolder();???????????? ????????convertView?=?mInflater.inflate(R.layout.item_layout,null);???????????? ????????viewHolder.ivIcon?=?(ImageView)?convertView.findViewById(R.id.iv_icon); ????????viewHolder.tvTitle?=?(TextView)?convertView.findViewById(R.id.tv_title);???????????? ????????viewHolder.tvContent?=?(TextView)?convertView.findViewById(R.id.tv_content);???????????? ????????convertView.setTag(viewHolder);???????? ????}?else?{???????????? ????????viewHolder?=?(ViewHolder)?convertView.getTag();???????? ????}???????? ????viewHolder.ivIcon.setImageResource(R.mipmap.ic_launcher); ???????? ?/***************************(修改版本)這三行代碼放這里?Start******************************/??????? ????????String?url?=?mList.get(position).newsIconUrl;???????? ????????viewHolder.ivIcon.setTag(url);???????? ????????mImageLoader.showImageByAsyncTask(viewHolder.ivIcon,?url); ?/*************************(修改版本)這三行代碼放這里?End********************************/ ????viewHolder.tvTitle.setText(mList.get(position).newsTitle);???????? ????viewHolder.tvContent.setText(mList.get(position).newsContent);???????? ????return?convertView;???? }
修改后沒有問題了.
不知道為什么呢?請求解答!