Gridview的onItemClick事件无响应
作者:jao 发布于:2014-8-21 16:52 分类:Andriod开发
思路来自于文文章:Gridview的手势滑动与onItemClick事件有冲突原作者说:用ViewFlipper实现了多页Gridview的滑屏效果。问题是,当OnFling事件发生时,往往也会伴随着发生Gridview的 onItemClick事件。(我既希望处理OnFling实现多页滑屏,也希望能够处理每页中Gridview的元素单击事件,但是不希望两者同时发 生,否则就有冲突了。)具体代码如下......
这里就不再多说别人的问题了,解决这个问题我可是花了2个多小时啊。写下这篇文章给大家带来帮助也方便自己以后查询
我在原来的TouchListener中写的代码出了问题,具体代码如下
public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_DOWN) { // 取得左右滑动时手指按下的X坐标 touchDownX = event.getX(); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { // 取得左右滑动时手指松开的X坐标 touchUpX = event.getX(); if (touchUpX - touchDownX > 80) { // 从右往左,看前一个View Log.v("ChatFaceGridViewFlipper", " 从右往左,看前一个View"); // 设置View切换的动画 viewFlipper.setInAnimation(AnimationUtils.loadAnimation(c, android.R.anim.slide_in_left)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(c, android.R.anim.slide_out_right)); viewFlipper.showPrevious(); Log.v("ChatFaceGridViewFlipperOnTouchListener__position", String.valueOf(position)); ((ChatFacePageImageView)mrlFacePageImageView).setPageImageView(numCount, position, resId,false); } else if (touchDownX - touchUpX > 80) { // 从左往右,看后一个View Log.v("ChatFaceGridViewFlipper", " 从左往右,看后一个View"); viewFlipper.setInAnimation(AnimationUtils.loadAnimation(c, R.anim.slide_in_right)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(c, R.anim.slide_out_left)); viewFlipper.showNext(); Log.v("ChatFaceGridViewFlipperOnTouchListener__position", String.valueOf(position)); ((ChatFacePageImageView)mrlFacePageImageView).setPageImageView(numCount, position, resId,true); } // ChatFacePageImageView cfpRl=new ChatFacePageImageView(c); // if(position<numCount){ // cfpRl.setPageImageView(numCount, position, resId); //} return true; } return false; }
修改代码后为
public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub if (event.getAction() == MotionEvent.ACTION_DOWN) { // 取得左右滑动时手指按下的X坐标 touchDownX = event.getX(); return true; } else if (event.getAction() == MotionEvent.ACTION_UP) { // 取得左右滑动时手指松开的X坐标 touchUpX = event.getX(); if (touchUpX - touchDownX > 80) { // 从右往左,看前一个View Log.v("ChatFaceGridViewFlipper", " 从右往左,看前一个View"); // 设置View切换的动画 viewFlipper.setInAnimation(AnimationUtils.loadAnimation(c, android.R.anim.slide_in_left)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(c, android.R.anim.slide_out_right)); viewFlipper.showPrevious(); Log.v("ChatFaceGridViewFlipperOnTouchListener__position", String.valueOf(position)); ((ChatFacePageImageView)mrlFacePageImageView).setPageImageView(numCount, position, resId,false); } else if (touchDownX - touchUpX > 80) { // 从左往右,看后一个View Log.v("ChatFaceGridViewFlipper", " 从左往右,看后一个View"); viewFlipper.setInAnimation(AnimationUtils.loadAnimation(c, R.anim.slide_in_right)); viewFlipper.setOutAnimation(AnimationUtils.loadAnimation(c, R.anim.slide_out_left)); viewFlipper.showNext(); Log.v("ChatFaceGridViewFlipperOnTouchListener__position", String.valueOf(position)); ((ChatFacePageImageView)mrlFacePageImageView).setPageImageView(numCount, position, resId,true); } // ChatFacePageImageView cfpRl=new ChatFacePageImageView(c); // if(position<numCount){ // cfpRl.setPageImageView(numCount, position, resId); //} return false; } return false; }
MotionEvent.ACTION_UP的返回值改为了false
这样就可以执行多个listener了
再看看我的listner的添加
gridview2[index].setOnItemClickListener(new ChatFaceGridViewItemClickListener());
gridview2[index].setOnTouchListener(new ChatFaceGridViewFlipperOnTouchListener(index,viewFlipper,this,mrlFacePageImageView));
虽然我用的是自定义的listener但是,还是能轻易的看出来.我这个问题的关键在于touch的返回值,因为点击也是touch事件的一种.
之前返回true导致了后面不能在执行click的事件.而设置成false就完美解决了.
今天搜索了一堆堆关于无法响应的问题的解决方案
不同的代码有不同的问题.大家在以后开发过程中遇到问题看来不能只看表面现象了.还有可能是其他原因.
标签: java Gridview onItemClick
评论:
我的主页统计
- 建站日期:2012-11-26
2014-08-29 10:33