마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

그리드뷰 OnItemClickListener 질문입니다

0 추천
그리드뷰에 이미지를 여러장 깔아놓고

 

각 이미지를 터치하면 커지는 갤러리를 만들고 있는데요

 

이미지 사이즈를 건드리는게 아니고

전체화면을 차지하고 있는 invisible된 이미지뷰의 백그라운드를

터치한 이미지로 바꿔준 뒤 visible하는 방식으로 구현하고 있습니다

 

이러려면 onItemClick 메소드가 호출됐을때 해당 아이템(이미지)의 id를 읽어와야 하는데

(AdapterView<?> parent, View v, int position, long id)

 

View v를 이용해서 터치한 아이템의 id를 불러오려고 하니

 터치만 하면 앱이 중지됩니다.

여기서 정보를 확인하고 parent.getAdapter().getItemId를 써도 마찬가지로 중지되네요.

혹시나 해서 v.getId로 log를 찍어보니 -1이 나오는데...

 
로그캣

android.content.res.ResourcesNotFoundException: Resource ID #0xffffff

 

리소스를 찾을 수 없다고 합니다.
 

 

정리하자면 onItemClick 메소드 호출시 해당 아이템의 id값을 가져오고 싶습니다
익명사용자 (5,930 포인트) 님이 2014년 10월 15일 질문
익명사용자님이 2014년 10월 15일 수정

1개의 답변

0 추천
 
채택된 답변

말씀하고 계신 이미지 resource id와 사용하려고 하는 getId (또는 getItemId)는 전혀 다른것입니다.

 그리드뷰 하나의 아이템이 ImageView라면 onItemClick에서 v를 ImageView를 캐스팅해서 getDrawable() 해서

ImageView가지고 있는 BitmapDrawable 객체를 가져와서 큰 이미지뷰에 setImageDrawable 하셔야 합니다.

 

예제 코드

public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {
    if (v instanceof ImageView) {
        Drawable d = ((ImageView) v).getDrawable();
        if (d != null) {
            bigImageView.setImageDrawable(d);
        } else {
            Log.w("TAG", "drawable is null");
   }
}
Gradler (109,780 포인트) 님이 2014년 10월 15일 답변
익명사용자님이 2014년 10월 15일 채택됨
감사합니다! 기본적인 지식도 없이 삽 푸고 있었네요. 어쩐지 id값이 -1, 1 나오더라니
...