我用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(){