解決 setOnItemClickListener,setOnScrollListener與setOnTouchListener事件沖突問題


代碼案例如下:

     lvXxsdMore.setOnItemClickListener(xxsdMoreListener); //對listView 注冊onclick事件
        
        lvXxsdMore.setOnScrollListener(new WScrollListener()); //監聽ListView 的上下滑動事件
        
        lvXxsdMore.setOnTouchListener(new OnTouchListener() { //對ListView注冊觸屏事件
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if(event.getAction() == MotionEvent.ACTION_UP){
                    if(MainInfoActivity.flXxsdYgzHsqj.getVisibility() == View.VISIBLE){
                        MainInfoActivity.flXxsdYgzHsqj.setVisibility(View.GONE);
                    }
                }
                return false;
            }
        });

如果上述代碼中,onTouch返回的是TRUE則,OnItemClickListener 與 OnScrollListener兩個事件不會被觸發。

Touch事件的執行流程:

ACTION_DOWN ->  ACTION_MOVE -> ACTION_UP  ->  OnClick/OnLongClick

View首先會先響應ACTION_DOWN事件,並返回一個boolean值:

   a:返回True,表示該View接受此按下動作,就是說這個點擊動作的按下操作被中止,然后就是響應ACTION_UP事件。點擊動作的按下操作被ACTION_DOWN接受之后就結束了,所以之后的OnClick/OnLongClick事件就不會響應了。

       b:返回false,表示該View不接受此按下動作,響應完之后,按下操作繼續往下發,之后是響應ACTION_UP事件,

    這里又有一個判斷:

      如果ACTION_UP事件返回True,表示ACTION_UP接受松開操作,松開操作中止;View會一直處於按下狀態,之后View便會響應OnLongClick事件。

      如果ACTION_UP事件返回false,表示ACTION_UP不接收松開操作,松開操作繼續下發;因為按下與松開操作都沒有被中止,所以之后View就會響應OnClick事件

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM