1

내 GridView 내부의 ImageView 배경을 변경 (onClick)하려하지만 클릭하면 선택한 행과 다른 임의의 하나가 클릭에 반응합니다. 아래 코드는 내 코드입니다 :Android : 여러 gridView 행이 항목에 응답 함

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    final ViewHolder holder; 
    final int index = position; 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.item_grid_galeria_modelo, parent, false); 

     holder = new ViewHolder(); 
     holder.imageView = (ImageView) convertView.findViewById(R.id.image); 
     holder.favoriteStar = (ImageView) convertView.findViewById(R.id.img_fav_star); 

     convertView.setTag(holder); 
    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 
    holder.favoriteStar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!holder.isFavorited) { 
       holder.isFavorited = true; 
       holder.favoriteStar.setImageResource(R.drawable.ic_star); 
      } else { 
       holder.isFavorited = false; 
       holder.favoriteStar.setImageResource(R.drawable.ic_star_grey); 
      } 
     } 
    }); 

도움을 주시면 감사하겠습니다. 감사! (여러 뷰가 동일한 코드의 반복으로 생성되는

자바 : :]

답변

1

한 가지 방법은 같은 것을 할 수있는 자바 나 XML의 이미지 뷰 (들)에 대한 고유 ID를 설정하는 것입니다

ViewHolder vh; 
ImageView iv; 
View vi; 
int location = 0; 

vi = view; 
vh = new ViewHolder(); 

// Use to get the current ImageView being worked on. 
vh.iv = (ImageView) vi.findViewById(R.id.image); 

// Use to set new id for the ImageView currently being worked on. 
vh.iv.setId(location++); 

XML (XML 레이아웃의 여러보기) 지금

<!-- Copy and paste and new name for each and every view needed --> 
android:id="@+id/id_name_here" 

모든 아이디 나 때문에 이제는 청취자가 올바른보기를 선택할 수 있습니다.

예 :

public void clickListener(View view) { 
final int id = view.getId(); 

// Can now get the unique id of the exact ImageView that was clicked 
ImageView iv = (ImageView) findViewById(id); 

// Will now set new image for and only for the correct ImageView that was clicked. 
iv.setImageResource(R.drawable.ic_star); 
} 

는 견해가 생성되는 방법으로 아마뿐만 아니라 필요한 다른 코드의 변경 또는 추가 사항이있을 수 있습니다. 그러나 고유 ID는 각보기를 별도로 유지하여 올바른보기 만 설정하거나 가져올 수 없도록합니다.

+0

감사합니다. 정말 유용한 팁 – Dico