【发布时间】:2012-05-12 13:49:38
【问题描述】:
下面是我的ListView 适配器。您可以在其中看到有一个FillData 函数为列表项填充数据。我看到它总是被调用。列表和ListAdapter 不应该每项填写一次吗?我做错了什么?
public class GlobalRecipeListAdapter extends ArrayAdapter<Recipe> {
private final static String mTAG = "GlobalRecipeListAdapter";
private LayoutInflater mInflater = null;
private int mListViewItemResId = -1;
private ImageLoader mImageLoader = new ImageLoader( CookTales.Instance() );
public GlobalRecipeListAdapter(Context context, int resId, ArrayList<Recipe> items) {
super(context, resId, items );
mListViewItemResId = resId;
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
if (convertView == null) {
convertView = mInflater.inflate( mListViewItemResId, null );
holder.recipePic = new DisplayableImageView( (ImageView) convertView.findViewById( R.id.list_RecipeImageViewId ) );
holder.name = (TextView) convertView.findViewById( R.id.name_entry );
holder.author = (TextView) convertView.findViewById( R.id.username_entry );
holder.likes = (TextView) convertView.findViewById( R.id.likes_entry );
holder.diffculty = (ImageView) convertView.findViewById( R.id.list_DifficultyImageViewId );
holder.preparationTime = (ImageView) convertView.findViewById( R.id.list_TimeImageViewId );
holder.recipePic.GetImageView().setOnClickListener(new ImageClickListener(getContext(), holder.recipePic));
holder.name.setTypeface( CookTales.Fonts.ARIAL );
holder.name.setTextSize( CookTales.Fonts.RUNNING_TEXT_SIZE );
holder.author.setTypeface( CookTales.Fonts.ARIAL );
holder.author.setTextSize( CookTales.Fonts.RUNNING_TEXT_SIZE );
holder.likes.setTypeface( CookTales.Fonts.ARIAL );
holder.likes.setTextSize( CookTales.Fonts.RUNNING_TEXT_SIZE );
} else {
holder = (ViewHolder) convertView.getTag();
}
if( super.getItem(position) != null) {
if( position == 0 && position == getCount() - 1 ) {
convertView.setBackgroundResource( R.drawable.list_single ); } else if( position == 0 ) {
convertView.setBackgroundResource( R.drawable.list_up );
}
else if( position == getCount() - 1 ) {
convertView.setBackgroundResource( R.drawable.list_down );
} else {
convertView.setBackgroundResource( R.drawable.list_middle ); }
FillRecipeDataToHolder( position, holder );
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
return convertView;
}
protected void FillRecipeDataToHolder(int position, ViewHolder viewHolder ) {
viewHolder.name.setText( getItem(position).GetName() );
viewHolder.author.setText( getItem(position).GetAuthor() );
viewHolder.likes.setText( getItem(position).GetNumOfLikes() + " likes.");
viewHolder.diffculty.setImageResource( Convertor.Difficulty2ImageResId( getItem(position).GetDifficulty(), mTAG ) );
viewHolder.preparationTime.setImageResource( Convertor.Time2ImageResId( getItem(position).GetPreparationTime() ) );
if( getItem( position ).GetRecipePicture().isValid() ){
viewHolder.recipePic.GetImageView().setImageResource( Convertor.Category2ImageView( getItem( position ).GetCategory(), mTAG ) );
mImageLoader.DisplayImage( getItem( position ).GetRecipePicture().GetImageLocation(),
getItem( position ).GetRecipePicture().isUploaded() == false,
getContext(),
viewHolder.recipePic );
}
else
{
viewHolder.recipePic.GetImageView().setImageResource( Convertor.Category2ImageView( getItem( position ).GetCategory(), mTAG ) );
}
}
static protected class ViewHolder {
DisplayableImageView recipePic;
TextView name;
TextView author;
TextView likes;
ImageView diffculty;
ImageView preparationTime;
}
}
【问题讨论】: