3

내 활동에는 목록보기가 있는데, 그 이유는 onItemClickListeneronTouchListener입니다. 내 list.OnTouch 메서드에서 행을 클릭하면 MotionEventDownUp이라는 메서드가 호출됩니다. 두 경우 모두 터치 이벤트를 처리하고 싶지 않고 관찰하고 싶기 때문에 "false"를 반환합니다. 이 순간에 나는 onItemClick이 전화해야한다고 생각하지만 일어나는 것은 아닙니다. 그러나 내 목록보기를 이동하면 OnTouch 동작 이벤트 "이동"이 호출 된 후 항목을 클릭하면 트리거됩니다. 그렇다면 처음에 왜 itemClick이 트리거되지 않았으며 목록보기에서 이동 한 후에 트리거 된 이유는 무엇입니까?스크롤하지 않으면 onTouchListener가 있으면 OnItemClickListener가 트리거되지 않습니까?

코드 :

public class MainActivity extends Activity { 

Handler rHandler; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ListView lv = (ListView) this.findViewById(R.id.mylist); 
    lv.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, 
       int position, long id) { 
      System.out.println("An Item is clicked not touched"); 
     } 

    }); 
     rHandler = new Handler(this,lv); 
    } 


} 

나는 어댑터에 사용자 정의의 ListView 정맥 주사를 채우기하고 그 목록의 행이 나는 imageViews.So에 대한 몇 가지 온 클릭 이벤트를 imageViews.Also textViews를 구성하고, 내가 시도 안드로이드 : 포커스 및 안드로이드 : focusableInTouchMode가 imageView.But에서 false로 설정된 경우 성공하지 못했습니다. 나는 이미지 온 클릭 이벤트를 클릭하면 Handler.java

public class Handler implements View.OnTouchListener { 
    public Handler(Context mContext,ListView lv) { 
     lv.setOnTouchListener(this); 
    } 

    @Override 
     public final boolean onTouch(View view, MotionEvent event) { 
      switch (event.getAction()) { 
     case MotionEvent.ACTION_MOVE: { 
      System.out.println(" Motion ... "); 
      break; 
     } 

     case MotionEvent.ACTION_DOWN: { 
      System.out.println(" Motion Down "); 
      break; 
     } 

     case MotionEvent.ACTION_CANCEL: 
     case MotionEvent.ACTION_UP: { 
      System.out.println(" Motion Up "); 
      break; 
     } 
     } 
     System.out.println("I am returning false"); 
     return false; 
     } 
    } 

내 OnItemClick에서

활성화에 온 경우, 또는 나는 아주 이상한 내 list.Looks 이동!

+0

이 당신의 코드를 게시 도움이되기를 바랍니다 .. –

답변

0

super.onTouchEvent (이벤트)를 반환해야합니다. 대신에 나는 거짓을 반환합니다. 다시 retruning하여 시스템에 당신의보기에 대한 터치 이벤트를 원하지 않는다는 것을 알기 때문에 onClickEvent는 무시됩니다.

2

예 그렇다고하지 않습니다. 당신이 할 수있는 것은 기본적으로 나는 터치 작업이 완료되지 않은 경우 나은 PerformClick의 방법으로 내 OnItemClick 호출 해당 작업을에 발견하고

@Override 
    public boolean onTouch(View v, MotionEvent event) { 

     switch(event.getAction()) 
     { 
     case MotionEvent.ACTION_DOWN: 

      break;   
     case MotionEvent.ACTION_MOVE: 

      break; 

     case MotionEvent.ACTION_UP: 

      if(!mIsTouchHandeled){ 
       int position = mChatListView.pointToPosition((int) event.getX(), (int) event.getY()); 
       if(position!=ListView.INVALID_POSITION){ 
        mChatListView.performItemClick(mChatListView.getChildAt(position-mChatListView.getFirstVisiblePosition()), position, mChatListView.getItemIdAtPosition(position)); 
       } 
      } 
      break; 
     }   
     //  return super.onTouchEvent(event);  


     return false; 
    } 

} 

입니다.

+0

고맙습니다 많은 buddy..helped! – dd619

관련 문제