제목에 항목 안에있는보기를 클릭 할 때 항목의 정확한 위치를 알고 싶습니다.특정보기를 클릭하면 목록보기 내에서 항목의 위치를 어떻게 얻을 수 있습니까?
가정 해 보겠습니다 I ArrayAdapter와에서의 getView() 메소드 내에서 다음 코드가 : 온 클릭() 나는, 클릭 브이보기를 알고,하지만 난의 위치를 모르는 내
...
holder = new ViewHolder();
holder.iconAction = (ImageView)convertView.findViewById (R.id.download_item_iconAction);
holder.iconAction.setOnClickListener (new View.OnClickListener(){
@Override
public void onClick (View v){
//Item X is clicked
}
});
...
을 목.
트릭을 만들어 봅시다. getView()가 뷰를 생성 할 때 ViewHolder에서 위치를 저장하려고합니다 :
public View getView (int position, View convertView, ViewGroup parent){
ViewHolder holder;
if (convertView == null){
holder = new ViewHolder();
holder.iconAction = (ImageView)convertView.findViewById (id);
holder.iconAction.setOnClickListener (new View.OnClickListener(){
@Override
public void onClick (View v){
int pos = (Integer)v.getTag();
}
});
holder.iconWait.setTag (position);
...
}else{
holder = (ViewHolder)convertView.getTag();
}
...
}
이 코드는 작동하지만 항상 그런 것은 아닙니다. 모든 항목을 보려면 목록을 스크롤해야만 뷰가 재활용됩니다. 목록에 10 개의 요소가 있고 5 개만 표시된다고 가정합니다 (보이는 의미 : 항목의 픽셀 행이 1 개인 경우이 항목을 볼 수 있음). 이제 아래로 스크롤하면 여섯 번째 요소가 표시되지만 첫 번째 요소 (0)는 계속 표시됩니다. 조금 더 스크롤하면 첫 번째 요소가 숨겨지고 일곱 번째 요소가 나타납니다. 그러나이 새 요소의 뷰는 첫 번째 요소 (0)의 뷰입니다.
그래서 위치를 저장합니다 : 0, 1, 2, 3, 4 및 5. 일곱 번째 요소 (6)는 위치 0을 저장했습니다.
클릭 콜백을 얻을 수있는 또 다른 방법은 ListView에의 OnItemClickListener 리스너를 사용하고 있습니다 :
listView = getListView();
listView.setOnItemClickListener (new AdapterView.OnItemClickListener(){
@Override
public void onItemClick (AdapterView<?> parentView, View childView, int position, long id){
...
}
});
내가 아래로 스크롤하면 나는 정확한 위치를 얻을 수 있지만, 항목을 클릭 할 때 내가 콜백을받을 이러한 방법에 상관없이 클릭 된 자식보기.
감사합니다.
이 매우 합법적 인 질문은 아래로 내려갔습니다. –