2013-12-23 75 views
1

我有開始了一個gridview空的,那麼當用戶觸摸一個按鈕,他們增加一個「運動」到一個列表,然後我通知這樣GridView的是混合了圖像

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

在GridView那麼出現空的gridview框,如果用戶觸摸它,則會出現一系列圖像,並且它們所觸及的圖像將成爲gridview中的imageview。但是,如果他們觸摸按鈕並向GridView添加另一個練習,它已經由deafult擁有相同的圖像。它應該是空白的

但這不是我認爲我的問題在哪裏。下面是我的getview在gridview適配器

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; 
} 



} 

我認爲它與convertview有關。但我無法弄清楚什麼是錯的。

+0

w.addExercise(e);你可以在這裏修改這個功能嗎? – Triode

+0

w是一個練習列表。我只是將一個對象添加到列表中。沒有方法 –

回答

1

使用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

+0

這使得滾動更平滑,但它並沒有解決主要問題。如果我添加1個項目集並設置其圖片,那麼我添加的每個項目具有相同的圖像 –

+1

@CamConnor'BH.loadSingleBitmap(「WorkoutImages /」+ e.getFilepath()。trim(), c,持有人。 ivThumbnail);'可能是你的問題。問題在於如何根據位置將圖像設置爲imageview。 gridView回收視圖。 – Raghunandan

+1

@CamConnor文字顯示正確? – Raghunandan