안드로이드 개발 질문/답변
(글 수 45,052)
한 화면에 그리드뷰가 여러개 있고 각 그리드에 터치이벤트와 아이템 클릭이벤트를 주고싶어
GridView.setOnitemsetOnItemClickListener와
GridView.setOnTouchListener를 줬거든요.
터치이벤트가 발생되면 애니메이션 효과를
아이템클릭이벤트가 발생되면 해당 액티브를 실행시킬려고 하는데...
화면에 이벤트가 발생하게 되면 무조건 Touch리스너에 대한 이벤트만 발생이 되는데요.
이럴땐 어떻게 해야하나요``?
GridView.setOnitemsetOnItemClickListener와
GridView.setOnTouchListener를 줬거든요.
터치이벤트가 발생되면 애니메이션 효과를
아이템클릭이벤트가 발생되면 해당 액티브를 실행시킬려고 하는데...
화면에 이벤트가 발생하게 되면 무조건 Touch리스너에 대한 이벤트만 발생이 되는데요.
이럴땐 어떻게 해야하나요``?
2009.11.19 20:04:51
OnTouchListener에서 처리를 가로채서 OnItemClickListener가 호출되지 않는것으로 보이네요. OnTouchListener의 구현을 바꾸어보세요. 부모클래스의 메서드도 호출해야하고 리턴값도 잘 처리해야합니다.
2010.08.31 22:10:53
OnTouch Event 객체에서 x, y 좌표값을 얻은 뒤 좌표값으로
GridView 의 pointToPosition, pointToRowId 메소드를 통해 position 과 rowId 값을 얻은 후
performItemClick 메소드를 호출하면 onTouch 핸들링 상황에서 onItemClick 이벤트를 발생시킬 수 있습니다.
int p = ((GridView)v).pointToPosition((int)event.getX(), (int)event.getY());
long id = ((GridView)v).pointToRowId((int)event.getX(), (int)event.getY());
performItemClick(((GridView)v), p, id);
GridView 의 pointToPosition, pointToRowId 메소드를 통해 position 과 rowId 값을 얻은 후
performItemClick 메소드를 호출하면 onTouch 핸들링 상황에서 onItemClick 이벤트를 발생시킬 수 있습니다.
int p = ((GridView)v).pointToPosition((int)event.getX(), (int)event.getY());
long id = ((GridView)v).pointToRowId((int)event.getX(), (int)event.getY());
performItemClick(((GridView)v), p, id);