以下所有的時間是我ListView
適配器。你可以看到它有一個FillData
功能列表項目填充數據。我發現它總是被稱爲。如若不在名單和每個項目的ListAdapter
補一次?我究竟做錯了什麼?的ListView填充物品的適配器
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;
}
}
但是爲什麼行:支架=(ViewHolder)convertView.getTag();從未被稱爲? – user1136875 2012-03-25 18:49:02
@ user1136875該行應該叫,因爲列表將回收的意見。你究竟如何看待它不被稱爲?在'convertView'膨脹後(如果它爲null),'convertView.setTag(holder);'應該放在if子句中。 – Luksprog 2012-03-25 18:53:09
非常感謝。找到了 – user1136875 2012-03-25 18:54:56