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

listview의 row를 onTouchListener에 등록하기

0 추천
안녕하세요
 
아래와 같이 리스트뷰에는 현재 접속자들의 목록이 나와있습니다
 
접속자 이름1 귓속말 버튼
접속자 이름2 귓속말 버튼

                                                                                       .

                                                                                       .

귓속말 버튼을 Down 하고 있는 동안에는 해당 접속자에게 귓속말을 할 수 있습니다.

그런데 귓속말 버튼 말고 Row 전체를 클릭했을 때에도 귓속말 버튼과 같은 기능을 하게 하려고 합니다.

그래서 Row에 onTouchListener를 등록했구요

 

여기서 문제가 생겼습니다. 스크롤을 해서 내리려면 아이템 (Row) 을 잡아서 내려야하는데 그러다보니

아이템이 터치돼서 귓속말이 엉뚱한 사람에게 가는 경우가 발생되고 아래와같은 로그가 뜨면서

앱이 강제 중지됩니다..

해결에 도움을 주시면 감사하겠습니다 ㅠㅠ

 

 
07-03 09:16:24.262: E/InputEventReceiver(13727): Exception dispatching input event.
07-03 09:16:24.262: W/dalvikvm(13727): threadid=1: thread exiting with uncaught exception (group=0x41c71438)
07-03 09:16:24.272: E/AndroidRuntime(13727): FATAL EXCEPTION: main
07-03 09:16:24.272: E/AndroidRuntime(13727): java.lang.ClassCastException: java.lang.Integer cannot be cast to com.btb.pump.pvt.adapter.TalkerListAdapter$ViewHolder
07-03 09:16:24.272: E/AndroidRuntime(13727): at com.btb.pump.pvt.adapter.TalkerListAdapter.getView(TalkerListAdapter.java:61)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.AbsListView.obtainView(AbsListView.java:2290)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.ListView.makeAndAddView(ListView.java:1771)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.ListView.fillDown(ListView.java:673)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.ListView.fillGap(ListView.java:636)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5285)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.AbsListView.scrollIfNeeded(AbsListView.java:3244)
07-03 09:16:24.272: E/AndroidRuntime(13727): at android.widget.AbsListView.onTouchEvent(AbsListView.java:3672)
 
글자 제한 때문에 댓글에 나머지 로그 달아보겠습니다..
윤둥이 (4,560 포인트) 님이 2013년 7월 3일 질문
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.View.dispatchTouchEvent(View.java:7159)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2170)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2176)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1919)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2196)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1568)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.app.Activity.dispatchTouchEvent(Activity.java:2607)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2145)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.View.dispatchPointerEvent(View.java:7339)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl.deliverPointerEvent(ViewRootImpl.java:3215)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:3160)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:4209)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:4188)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:4312)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:171)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.InputEventReceiver.nativeConsumeBatchedInputEvents(Native Method)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.InputEventReceiver.consumeBatchedInputEvents(InputEventReceiver.java:163)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl.doConsumeBatchedInput(ViewRootImpl.java:4259)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.ViewRootImpl$ConsumeBatchedInputRunnable.run(ViewRootImpl.java:4331)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.Choreographer.doCallbacks(Choreographer.java:555)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.Choreographer.doFrame(Choreographer.java:523)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.os.Handler.handleCallback(Handler.java:615)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.os.Handler.dispatchMessage(Handler.java:92)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.os.Looper.loop(Looper.java:137)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at android.app.ActivityThread.main(ActivityThread.java:4885)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at java.lang.reflect.Method.invokeNative(Native Method)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at java.lang.reflect.Method.invoke(Method.java:511)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
07-03 09:16:24.272: E/AndroidRuntime(13727):  at dalvik.system.NativeStart.main(Native Method)

1개의 답변

0 추천
음~~! 저도 리스트에 터치리스너를 달아본 적은 없지만....

만약 터치리스너 자체가 문제가 된다면 롱클릭이벤트는 어떤가요???
ThisPlus (46,920 포인트) 님이 2013년 7월 3일 답변
하아~롱클릭으로 달아보라는 말씀이시군요
 궁금한게 있는데

LongPress와 onLongClickListener 가 뭐가 다르죠?
...