您的位置:首页 > 移动开发 > Android开发

关于ListView中使用GestureDetector冲突的解决办法

2016-03-02 11:56 471 查看


因为实在写的太好,所以转载过来:


关于ListView中使用GestureDetector冲突的解决办法


关于ListView中使用GestureDetector冲突的解决办法

在做OnGestureListener手势滑动界面的时候,会遇到这样的问题,就是当界面中含有ListView的时候,OnGestureListener的界面滑动就被ListView拦截并消费掉了。 

为了解决这个问题需要重写ListView的OnTouchListener接口: 

Java代码  


ListView listView=(ListView)findViewById(R.id.listViewBeside);  

          

        listView.setOnTouchListener(new View.OnTouchListener(){  

  

            @Override  

            public boolean onTouch(View v, MotionEvent event) {  

                // TODO Auto-generated method stub  

                leftPanel.getGestureDetector().onTouchEvent(event);//;//在这里先处理下你的手势左右滑动事件  

                return false;  

            }  

              

        });  

      

        listView.setOnItemClickListener(new ListView.OnItemClickListener() {  

  

            @Override  

            public void onItemClick(AdapterView<?> parent, View view,  

                    int position, long id) {  

                // TODO Auto-generated method stub  

                Log.i("tag", "position=="+position);  

            }  

        });  

因为我的手势是定义在leftPanel这个View中的,所以是leftPanel.getGestureDetector().onTouchEvent(event);。如果你的手势是写在Activity中的,那么就是mGestureDetector.onTouchEvent(event); 

这样既能保证在ListView上实现拖动,又能保证ListView上的Item Click.

注:我的项目里面因为是在fragment里面使用了滑动的监听事件,所以重写的方法如下:

// 为了避免listview上下滚动和手势左右滑动引起的事件冲突,重写该方法
list.setOnTouchListener(new View.OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
System.out.println("上下滑动和左右滑动是否都会调用呢" + event);
System.out.println("上下滑动和左右滑动是否都会调用呢" + event);
System.out.println("上下滑动和左右滑动是否都会调用呢" + event);

getActivity().onTouchEvent(event);
// leftPanel.getGestureDetector().onTouchEvent(event);// 需要这样写!
return false;
}

});
上述的意思就是当你监听了listview的点击事件时,进入你需要监听的view的点击处理方法中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息