网格视图正在混合图像



我有一个网格视图,它开始时是空的,然后当用户触摸按钮时,他们会向列表中添加一个"练习",然后我像这样通知网格视图

Exercise e = new Exercise();
w.addExercise(e);
bwGVA.notifyDataSetChanged();

然后会出现一个空的 GridView 框,如果用户触摸它,则会出现一系列图像,他们触摸的图像将成为 GridView 中的 ImageView。但是,如果他们触摸按钮并向网格视图添加另一个练习,它已经具有相同的图像。它应该是空白的

但这不是我认为我的问题所在。下面是我在网格视图适配器中的获取视图

public class BuildWorkoutGridViewAdapter extends BaseAdapter{
private static ArrayList<Exercise> ExerciseList;
Context c;
public BuildWorkoutGridViewAdapter(Context context, ArrayList<Exercise> _list) {
    c = context;
    ExerciseList = _list;
}
@Override
public int getCount() {
    // TODO Auto-generated method stub
    return ExerciseList.size();
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v;
    if(convertView == null){
        LayoutInflater li = (LayoutInflater) c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = li.inflate(R.layout.build_exercise_view, null);

    }else{
        v = (View) convertView;
    }
    Exercise e = ExerciseList.get(position);
    TextView Reps = (TextView) v.findViewById(R.id.tvCustomReps);
    TextView Sets = (TextView) v.findViewById(R.id.tvCustomSets);
    ImageView ivThumbnail = (ImageView) v
            .findViewById(R.id.ivBuildWorkout_Thumbnail);
    if (e.getSets() != null) {
        Sets.setText(e.getSets().trim());
    }
    if (e.getReps() != null) {
        Reps.setText(e.getReps().trim());
    }
    if (e.getFilepath() != null) {
        System.out.println("filepath:" + e.getFilepath().trim());
        BitmapHelper BH = new BitmapHelper(c);
        BH.loadSingleBitmap("WorkoutImages/" + e.getFilepath().trim(),
                c, ivThumbnail);
        e.setImageStatus(true);
    }
    // TODO Auto-generated method stub
    return v;
}
@Override
public Exercise getItem(int position) {
    // TODO Auto-generated method stub
    return ExerciseList.get(position);
}
@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return 0;
}

}

我认为这与转换视图有关。但是我不知道出了什么问题。

使用ViewHolder模式实现平滑滚动和性能

http://developer.android.com/training/improving-layouts/smooth-scrolling.html

static class ViewHolder
{
TextView reps,Sets;
ImageView ivThumbnail;
}

getView更改为

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView == null){
        LayoutInflater li = (LayoutInflater) c
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = li.inflate(R.layout.build_exercise_view, null);
        holder = new ViewHolder();
        holder.Reps = (TextView) convertView.findViewById(R.id.tvCustomReps);
        holder.Sets = (TextView) convertView.findViewById(R.id.tvCustomSets);
        holder.ivThumbnail = (ImageView) convertView.findViewById(R.id.ivBuildWorkout_Thumbnail);
        convertView.setTag(holder);
    }else{
       holder = (ViewHolder) convertView.getTag();
    }
    Exercise e = ExerciseList.get(position);
    if (e.getSets() != null) {
        holder.Sets.setText(e.getSets().trim());
    }
    if (e.getReps() != null) {
        holder.Reps.setText(e.getReps().trim());
    }
    if (e.getFilepath() != null) {
        System.out.println("filepath:" + e.getFilepath().trim());
        BitmapHelper BH = new BitmapHelper(c);
        BH.loadSingleBitmap("WorkoutImages/" + e.getFilepath().trim(),
                c, holder.ivThumbnail);
        e.setImageStatus(true);
    }
    return convertView;
}

如果需要更新 gridView 更新基础数据,则会在适配器上填充 gridView 并调用notifyDataSetChanged

最新更新