2012-09-19 3 views
2

몇 시간 동안이 문제가 발생합니다. ListView의 첫 번째 목록 항목에 대한 이미지를 설정하려고하지만 다른 목록 항목의 일부 ImageView도 변경됩니다.ListView 내 ImageView 업데이트

public class MyAdapter extends BaseAdapter { 
    private LayoutInflater mInflater; 
    public ArrayList<ListItem> myItems = new ArrayList<ListItem>(); 

    Player[] players; 

    public MyAdapter() { 
     DataBase banco = new DataBase(ScoreBoard.this); 
     players = banco.consultaJogadores(); 
     mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     for (int i = 0; players[i] != null; i++) { 
      ListItem listItem = new ListItem(); 
      listItem.caption = players[i].getName(); 
      myItems.add(listItem); 
     } 
     notifyDataSetChanged(); 
    } 

    public int getCount() { 
     return myItems.size(); 
    } 

    public Object getItem(int position) { 
     return position; 
    } 

    public long getItemId(int position) { 
     return position; 
    } 

    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder; 
     if (convertView == null) { 
      holder = new ViewHolder(); 
      convertView = mInflater.inflate(R.layout.topplayer, null);  
      holder.textView = (TextView) convertView.findViewById(R.id.topPlayerTextView); 
      holder.imageview = (ImageView) convertView.findViewById(R.id.topPlayerImageView); 
      convertView.setTag(holder); 
     } else { 
      holder = (ViewHolder) convertView.getTag(); 
     }   
     holder.textView.setText(position + " " + players[position].getName() + " " + players[position].getScore()); 
     if (position == 0) { 
      holder.imageview.setImageResource(R.drawable.ball); 
     } 
     return convertView; 
    } 
} 

class ViewHolder { 
    TextView textView; 
    ImageView imageview; 
} 

class ListItem { 
    String caption; 
} 

목록의 첫 번째 플레이어에서 이미지를 변경하고 싶습니다. 인덱스 0, 1, 4, 6, 8, 9, 11, 13 및 14의 플레이어가 업데이트되고 논리적 순서를 따르지 않습니다. 그리고 스크롤 할 때 이미지가 다시 변경됩니다.

덕분에 당신은 많은 ListItems 이미지가 명시 적으로 해제 설정해야 설정하지 않으 때문에

답변

3

당신은 견해를 재활용하고 있습니다 :

if (position == 0) { 
    holder.imageview.setImageResource(R.drawable.ball); 
} else { 
    holder.imageview.setImageDrawable(null); 
} 

이 (그렇지 않으면 그냥 기억합니다 마지막으로 그 뷰 (즉 convertView)가 사용 된 이미지가 설정되었습니다!

+0

감사합니다. 당신은 ImageResource에 null을 설정할 수 없습니다. 그러나 이것을 시도했습니다 : holder.imageview.setImageResource (R.drawable.blank); 나는 더 나은 것을 만들 것이다 la 그리고 난 ViewHolder에서 이미지를 제거합니다. 다시 감사합니다. – user1684024

+0

'setImageDrawable', 또는 예 투명 이미지 리소스를 사용하십시오. – Blundell

+0

아, 투명 이미지를 사용하는 것이 더 좋습니다. ImageView를 제거하려고 시도합니다. – user1684024

관련 문제