2011-11-11 3 views
0

내가 ArrayAdapter와 이미지 뷰에 배치 한을 클릭하여 ArrayAdapter와에서 ID를 얻는 방법 목록은 다음과 같습니다안드로이드는 이미지 뷰

이름 2 | 이미지보기 |

이름 3 | 이미지보기 |

끝 등등 ..

나는 이미지 뷰를 클릭 한 후 항목 ID를 얻을하는 방법을 모르겠어요.

@Override 
public View getView(int position, View contextView, ViewGroup parent) { 
    final ViewHolder viewHolder; 
    View rowView = contextView; 
    final CardList list = _cardList.get(position); 

    if (rowView == null) { 
     LayoutInflater layoutInflater = _context.getLayoutInflater(); 
     rowView = layoutInflater.inflate(R.layout.cardlist_viewlist_tpl, null, true); 
     viewHolder = new ViewHolder(); 
     viewHolder.tvCardListName = (TextView) rowView.findViewById(R.id.tvCardListName); 
     viewHolder.btnCardListLearn = (ImageView) rowView.findViewById(R.id.btnCardListLearn); 
     viewHolder.btnCardListLearn.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent = new Intent(_context, LearningCardActivity.class); 

       //!!!!!!!!!!!!!!! 
       //this doesn't work, I always get 1st positon Id 
       intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, list.getId()); 
       //!!!!!!!!!!!!!!!! 

       _context.startActivity(intent); 
      } 
     }); 

     rowView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) rowView.getTag(); 
    } 

    viewHolder.tvCardListName.setText(list.getName()); 

    return rowView; 
} 

답변

0

당신이있어 같은 rowView/contextView을 다시 사용하고 만 rowView이 null 같다 당신의 OnClickListener를하는 경우 설정하는 것이 보인다. 기본적으로 viewholder 객체의 수신기는 처음으로 getView()이 호출 될 때만 설정됩니다. 따라서 항상 동일한 첫 번째 항목의 ID를 볼 수 있습니다.

모든 행에 대해 수신기를 설정하려면 로직을 변경하고 setOnClickListener() 호출로 이동해야합니다. 당신은 전에 볼 반환이 속성을 설정

static class ViewHolder { 

    //... 

    int position; 

} 

:

public View getView(int position, View contextView, ViewGroup parent) { 
    View rowView = contextView; 
    if (rowView == null) { 
     // Code here will only be run the very first time 
     // (when the row view hasn't been constructed yet) 
    } else { 
     // Code here will be run after that, since we're 
     // re-using the row's view 
    } 
} 
1

당신처럼 ViewHolder 클래스에 속성을 추가 할 수 있습니다

//... 
viewHolder.position = position; 
return rowView; 

지금 당신의 항목 ID를 사용할 수 있습니다 당신의 holder.position를 사용하는 청취자. 귀하의 경우에는 , 그 결과는 아래와 같습니다 :

//... 
intent.putExtra(LearningCardActivity.CURRENT_CARD_LIST_ID, holder.position); 
//... 

의 더 나은 방법은 그렇게 할 경우 잘 모르겠어요하지만

바탕으로 ... 나를 위해 작동 : http://www.itsalif.info/content/custom-list-views-icons-and-listeners-android#comment-6526