当前位置: 代码迷 >> Android >> Gridview的手势滑动与onItemClick事件有冲突?解决思路
  详细解决方案

Gridview的手势滑动与onItemClick事件有冲突?解决思路

热度:33   发布时间:2016-05-01 21:04:55.0
Gridview的手势滑动与onItemClick事件有冲突?
我用ViewFlipper实现了多页Gridview的滑屏效果。问题是,当OnFling事件发生时,往往也会伴随着发生Gridview的onItemClick事件。(我既希望处理OnFling实现多页滑屏,也希望能够处理每页中Gridview的元素单击事件,但是不希望两者同时发生,否则就有冲突了。)具体代码如下:
public class MainActivity_TabContentActivity extends Activity
{
public class MYGestureListener extends SimpleOnGestureListener implements OnTouchListener {  
private GestureDetector m_gestureDetector;
  
public MYGestureListener(){  
super();  
}

public MYGestureListener(Context con){ 
this.m_gestureDetector = new GestureDetector(con, this);
}

public GestureDetector getGestureDector(){  
return this.m_gestureDetector;  
}

public boolean onTouch(View v, MotionEvent event) {  
return m_gestureDetector.onTouchEvent(event);  
}
  
@Override  
public boolean onSingleTapConfirmed(MotionEvent e) {  
return super.onSingleTapConfirmed(e);  
}  
  
@Override  
public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { 

  if (event1.getX() - event2.getX() > 50)
  {
m_vfDishList.showNext();
  return true;
  }
  else if (event2.getX() - event1.getX() > 50)
  {
  m_vfDishList.showPrevious();
  return true;
  }
   
return true;  
}  
}

public class MySimpleAdapter extends SimpleAdapter {  
public MySimpleAdapter(Context context,  
List<? extends Map<String, ?>> data, int resource,  
String[] from, int[] to) {  
super(context, data, resource, from, to);  
}  
 
@Override  
public View getView(int position, View convertView, ViewGroup parent) {  
View v = super.getView(position, convertView, parent);  
 
// 构造并返回Gridview所需的View
  // ......  
 
return v;  
}  
}

ArrayList<String> m_arDishes = new ArrayList<String>();
MyViewFlipper m_vfDishList;
MYGestureListener m_gestureListener;

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);  
  setContentView(R.layout.main_dishlist_tabcontent);  

// 获得数据,存入m_arDishes中
  ......
   
  // 分页创建GridView, 并将每页GridView加入ViewFlipper中
  m_gestureListener = new MYGestureListener(this);  
  for (int i = 1; i <= m_iTotalPage; i++)
  {
GridView gvDishList = new GridView(this);
  FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,
  FrameLayout.LayoutParams.WRAP_CONTENT);
  gvDishList.setLayoutParams(lp);
  gvDishList.setGravity(0);
  gvDishList.setNumColumns(3);
  gvDishList.setHorizontalSpacing(10);
  gvDishList.setVerticalSpacing(10);
  gvDishList.setColumnWidth(90);
  gvDishList.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);
  gvDishList.setOnTouchListener(m_gestureListener);  
  gvDishList.setOnItemClickListener(m_gvClickListener);
  gvDishList.setOnItemLongClickListener(new OnItemLongClickListener(){
  相关解决方案