Adding the boolean variables touchDown and touchUp to the adapter class is as follows:
private class MyListAdapter extends ArrayAdapter<MyObject>{ ... //touch down + touch up with no other motion events in between = click boolean touchDown = false; boolean touchUp = false; private int iHostViewID; ... public MyListAdapter(Context context,int viewResourceId, List<MyObject> objects) { super(context, textViewResourceId, objects); iHostViewID = viewResourceId; } @Override public View getView(int pos, View convertView, ViewGroup parent){ View itemView = convertView; //iff we cannot re-use a view if(itemView == null){ LayoutInflater inflater = ( (LayoutInflater)hContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); itemView = inflater.inflate(iHostViewID, null); } final View hItemView = itemView; final int hPosition = pos; ... final HorizontalScrollView textDataSV = (HorizontalScrollView)itemView.findViewById(R.id.widget_hsv); textDataSV.setOnTouchListener(new OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ touchDown = true; } else if(event.getAction() == MotionEvent.ACTION_UP){ touchUp = true; } else{ touchDown = false; touchUp = false; } if(touchDown && touchUp){ //click //mMyListView is the reference to the list view //instantiated in the view controller class responsible //for setting this adapter class as the list view adapter mMyListView.performItemClick(hItemView, hPosition, hItemView.getId()); } return false; } }); } }
This is far from ideal, but should work for most standard use cases.
source share