title: custom Horizontal listview not support imageview
body: <p>how to load dynamic images in custom listview i follow this tutorial to show listview in horizontal <a href="http://www.dev-smart.com/archives/34" rel="nofollow">http://www.dev-smart.com/archives/34</a> but the problem is this example HorizontialListView   not support image view  only text will be show if i replace image view  with Listview image wil be show   code is work fine if i replace HorizontalListView  with Listvew    both image and textview will show  </p>
  
  <pre><code>            public class fifthstep extends Activity {
                 private HorizontalListView listview;
  private HorizontalListView listview;
  
  CategoryListAdapter2 cla;
  
  
  static ArrayList&lt;Long&gt; Category_ID = new ArrayList&lt;Long&gt;();
  static ArrayList&lt;String&gt; Category_name = new ArrayList&lt;String&gt;();
  static ArrayList&lt;String&gt; Category_image = new ArrayList&lt;String&gt;();
  
  String CategoryAPI;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.listviewdemo);
                  listview = (HorizontalListView) this.findViewById(R.id.listview2);
  
      cla = new CategoryListAdapter2(fifthstep.this);
  
  
  
  
  
  
                 CategoryAPI = Utils.CategoryAPI;
  
  
      try {
  
          HttpClient client = new DefaultHttpClient();
          HttpConnectionParams.setConnectionTimeout(client.getParams(), 
    15000);
          HttpConnectionParams.setSoTimeout(client.getParams(), 15000);
          HttpUriRequest request = new HttpGet(CategoryAPI);
          HttpResponse response = client.execute(request);
          InputStream atomInputStream = response.getEntity().getContent();
          BufferedReader in = new BufferedReader(new 
          InputStreamReader(atomInputStream));
  
          String line;
          String str = "";
          while ((line = in.readLine()) != null){
              str += line;
          }
  
  
              JSONObject json = new JSONObject(str);
              JSONArray data = json.getJSONArray("worldpopulation");
  
              for (int i = 0; i &lt; data.length(); i++) {
                  JSONObject object = data.getJSONObject(i); 
  
              //    JSONObject category = 
          object.getJSONObject("Category");
  
  
              Category_ID.add(Long.parseLong(object.getString("rank")));
                  Category_name.add(object.getString("name"));
                  Category_image.add(object.getString("url"));
                  Log.d("Category name", Category_name.get(i));
                  listview.setAdapter(cla);
  
  
              }
  
  
  
  
                         public class CategoryListAdapter2 extends BaseAdapter {
  
  private Activity activity;
  private ImageLoader imageLoader;
  
  public CategoryListAdapter2(Activity act) {
      this.activity = act;
      imageLoader = new ImageLoader(act);
  }
  
  public int getCount() {
      // TODO Auto-generated method stub
      return fifthstep.Category_ID.size();
  }
  
  public Object getItem(int position) {
      // TODO Auto-generated method stub
      return position;
  }
  
  public long getItemId(int position) {
      // TODO Auto-generated method stub
      return position;
  }
  
  public View getView(int position, View convertView, ViewGroup parent) {
      // TODO Auto-generated method stub
      ViewHolder holder;
  
      if(convertView == null){
          LayoutInflater inflater = (LayoutInflater) activity
                  .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = inflater.inflate(R.layout.viewitem, null);
          holder = new ViewHolder();
  
          convertView.setTag(holder);
      }else{
          holder = (ViewHolder) convertView.getTag();
      }
  
  
      holder.txtText = (TextView) convertView.findViewById(R.id.title);
      holder.imgThumb = (ImageView) convertView.findViewById(R.id.image);
  
      holder.txtText.setText(fifthstep.Category_name.get(position));
  
          imageLoader.DisplayImage(fifthstep.Category_image.get(position),
              activity, holder.imgThumb);
  
      return convertView;
  }
  
  static class ViewHolder {
      TextView txtText;
      ImageView imgThumb;
  }
  
  
  
        }
  
  
  
  
  
  
  
                   public class HorizontalListView extends AdapterView&lt;ListAdapter&gt; {
  
  public boolean mAlwaysOverrideTouch = true;
  protected ListAdapter mAdapter;
  private int mLeftViewIndex = -1;
  private int mRightViewIndex = 0;
  protected int mCurrentX;
  protected int mNextX;
  private int mMaxX = Integer.MAX_VALUE;
  private int mDisplayOffset = 0;
  protected Scroller mScroller;
  private GestureDetector mGesture;
  private Queue&lt;View&gt; mRemovedViewQueue = new LinkedList&lt;View&gt;();
  private OnItemSelectedListener mOnItemSelected;
  private OnItemClickListener mOnItemClicked;
  private OnItemLongClickListener mOnItemLongClicked;
  private boolean mDataChanged = false;
  
  
  public HorizontalListView(Context context, AttributeSet attrs) {
      super(context, attrs);
      initView();
  }
  
  private synchronized void initView() {
      mLeftViewIndex = -1;
      mRightViewIndex = 0;
      mDisplayOffset = 0;
      mCurrentX = 0;
      mNextX = 0;
      mMaxX = Integer.MAX_VALUE;
      mScroller = new Scroller(getContext());
      mGesture = new GestureDetector(getContext(), mOnGesture);
  }
  
  @Override
  public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {
      mOnItemSelected = listener;
  }
  
  @Override
  public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
      mOnItemClicked = listener;
  }
  
  @Override
  public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {
      mOnItemLongClicked = listener;
  }
  
  private DataSetObserver mDataObserver = new DataSetObserver() {
  
      @Override
      public void onChanged() {
          synchronized(HorizontalListView.this){
              mDataChanged = true;
          }
          invalidate();
          requestLayout();
      }
  
      @Override
      public void onInvalidated() {
          reset();
          invalidate();
          requestLayout();
      }
  
  };
  
  @Override
  public ListAdapter getAdapter() {
      return mAdapter;
  }
  
  @Override
  public View getSelectedView() {
      //TODO: implement
      return null;
  }
  
  @Override
  public void setAdapter(ListAdapter adapter) {
      if(mAdapter != null) {
          mAdapter.unregisterDataSetObserver(mDataObserver);
      }
      mAdapter = adapter;
      mAdapter.registerDataSetObserver(mDataObserver);
      reset();
  }
  
  private synchronized void reset(){
      initView();
      removeAllViewsInLayout();
      requestLayout();
  }
  
  @Override
  public void setSelection(int position) {
      //TODO: implement
  }
  
  private void addAndMeasureChild(final View child, int viewPos) {
      LayoutParams params = child.getLayoutParams();
      if(params == null) {
          params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
      }
  
      addViewInLayout(child, viewPos, params, true);
      child.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
              MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
  }
  
  
  
  @Override
  protected synchronized void onLayout(boolean changed, int left, int top, int right, int bottom) {
      super.onLayout(changed, left, top, right, bottom);
  
      if(mAdapter == null){
          return;
      }
  
      if(mDataChanged){
          int oldCurrentX = mCurrentX;
          initView();
          removeAllViewsInLayout();
          mNextX = oldCurrentX;
          mDataChanged = false;
      }
  
      if(mScroller.computeScrollOffset()){
          int scrollx = mScroller.getCurrX();
          mNextX = scrollx;
      }
  
      if(mNextX &lt;= 0){
          mNextX = 0;
          mScroller.forceFinished(true);
      }
      if(mNextX &gt;= mMaxX) {
          mNextX = mMaxX;
          mScroller.forceFinished(true);
      }
  
      int dx = mCurrentX - mNextX;
  
      removeNonVisibleItems(dx);
      fillList(dx);
      positionItems(dx);
  
      mCurrentX = mNextX;
  
      if(!mScroller.isFinished()){
          post(new Runnable(){
              @Override
              public void run() {
                  requestLayout();
              }
          });
  
      }
  }
  
  private void fillList(final int dx) {
      int edge = 0;
      View child = getChildAt(getChildCount()-1);
      if(child != null) {
          edge = child.getRight();
      }
      fillListRight(edge, dx);
  
      edge = 0;
      child = getChildAt(0);
      if(child != null) {
          edge = child.getLeft();
      }
      fillListLeft(edge, dx);
  
  
  }
  
  private void fillListRight(int rightEdge, final int dx) {
      while(rightEdge + dx &lt; getWidth() &amp;&amp; mRightViewIndex &lt; mAdapter.getCount()) {
  
          View child = mAdapter.getView(mRightViewIndex, mRemovedViewQueue.poll(), this);
          addAndMeasureChild(child, -1);
          rightEdge += child.getMeasuredWidth();
  
          if(mRightViewIndex == mAdapter.getCount()-1) {
              mMaxX = mCurrentX + rightEdge - getWidth();
          }
  
          if (mMaxX &lt; 0) {
              mMaxX = 0;
          }
          mRightViewIndex++;
      }
  
  }
  
  private void fillListLeft(int leftEdge, final int dx) {
      while(leftEdge + dx &gt; 0 &amp;&amp; mLeftViewIndex &gt;= 0) {
          View child = mAdapter.getView(mLeftViewIndex, mRemovedViewQueue.poll(), this);
          addAndMeasureChild(child, 0);
          leftEdge -= child.getMeasuredWidth();
          mLeftViewIndex--;
          mDisplayOffset -= child.getMeasuredWidth();
      }
  }
  
  private void removeNonVisibleItems(final int dx) {
      View child = getChildAt(0);
      while(child != null &amp;&amp; child.getRight() + dx &lt;= 0) {
          mDisplayOffset += child.getMeasuredWidth();
          mRemovedViewQueue.offer(child);
          removeViewInLayout(child);
          mLeftViewIndex++;
          child = getChildAt(0);
  
      }
  
      child = getChildAt(getChildCount()-1);
      while(child != null &amp;&amp; child.getLeft() + dx &gt;= getWidth()) {
          mRemovedViewQueue.offer(child);
          removeViewInLayout(child);
          mRightViewIndex--;
          child = getChildAt(getChildCount()-1);
      }
  }
  
  private void positionItems(final int dx) {
      if(getChildCount() &gt; 0){
          mDisplayOffset += dx;
          int left = mDisplayOffset;
          for(int i=0;i&lt;getChildCount();i++){
              View child = getChildAt(i);
              int childWidth = child.getMeasuredWidth();
              child.layout(left, 0, left + childWidth, 
        child.getMeasuredHeight());
              left += childWidth + child.getPaddingRight();
          }
      }
  }
  
  public synchronized void scrollTo(int x) {
      mScroller.startScroll(mNextX, 0, x - mNextX, 0);
      requestLayout();
  }
  
  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
      boolean handled = super.dispatchTouchEvent(ev);
      handled |= mGesture.onTouchEvent(ev);
      return handled;
  }
  
  protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
              float velocityY) {
      synchronized(HorizontalListView.this){
          mScroller.fling(mNextX, 0, (int)-velocityX, 0, 0, mMaxX, 0, 0);
      }
      requestLayout();
  
      return true;
  }
  
  protected boolean onDown(MotionEvent e) {
      mScroller.forceFinished(true);
      return true;
  }
  
  private OnGestureListener mOnGesture = new 
       GestureDetector.SimpleOnGestureListener() {
  
      @Override
      public boolean onDown(MotionEvent e) {
          return HorizontalListView.this.onDown(e);
      }
  
      @Override
      public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
              float velocityY) {
          return HorizontalListView.this.onFling(e1, e2, velocityX, 
     velocityY);
      }
  
      @Override
      public boolean onScroll(MotionEvent e1, MotionEvent e2,
              float distanceX, float distanceY) {
  
          synchronized(HorizontalListView.this){
              mNextX += (int)distanceX;
          }
          requestLayout();
  
          return true;
      }
  
      @Override
      public boolean onSingleTapConfirmed(MotionEvent e) {
          for(int i=0;i&lt;getChildCount();i++){
              View child = getChildAt(i);
              if (isEventWithinView(e, child)) {
                  if(mOnItemClicked != null){
  
   mOnItemClicked.onItemClick(HorizontalListView.this, child, mLeftViewIndex + 1 + i, 
     mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                  }
                  if(mOnItemSelected != null){
  
   mOnItemSelected.onItemSelected(HorizontalListView.this, child, mLeftViewIndex + 1 + 
     i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                  }
                  break;
              }
  
          }
          return true;
      }
  
      @Override
      public void onLongPress(MotionEvent e) {
          int childCount = getChildCount();
          for (int i = 0; i &lt; childCount; i++) {
              View child = getChildAt(i);
              if (isEventWithinView(e, child)) {
                  if (mOnItemLongClicked != null) {
  
   mOnItemLongClicked.onItemLongClick(HorizontalListView.this, child, mLeftViewIndex + 1 
      + i, mAdapter.getItemId(mLeftViewIndex + 1 + i));
                  }
                  break;
              }
  
          }
      }
  
      private boolean isEventWithinView(MotionEvent e, View child) {
          Rect viewRect = new Rect();
          int[] childPosition = new int[2];
          child.getLocationOnScreen(childPosition);
          int left = childPosition[0];
          int right = left + child.getWidth();
          int top = childPosition[1];
          int bottom = top + child.getHeight();
          viewRect.set(left, top, right, bottom);
          return viewRect.contains((int) e.getRawX(), (int) e.getRawY());
      }
  };
  
  
  
         }
  </code></pre>
  
  <p>public class HorizontalListView extends AdapterView {</p>
  
  <pre><code>public boolean mAlwaysOverrideTouch = true;
  protected ListAdapter mAdapter;
  private int mLeftViewIndex = -1;
  private int mRightViewIndex = 0;
  protected int mCurrentX;
  protected int mNextX;
  private int mMaxX = Integer.MAX_VALUE;
  private int mDisplayOffset = 0;
  protected Scroller mScroller;
  private GestureDetector mGesture;
  private Queue&lt;View&gt; mRemovedViewQueue = new LinkedList&lt;View&gt;();
  private OnItemSelectedListener mOnItemSelected;
  private OnItemClickListener mOnItemClicked;
  private OnItemLongClickListener mOnItemLongClicked;
  private boolean mDataChanged = false;
  private boolean mMeasureHeightForVisibleOnly = true;
  
  
  public HorizontalListView(Context context, AttributeSet attrs) {
      super(context, attrs);
      initView();
  }
  
  private synchronized void initView() {
      mLeftViewIndex = -1;
      mRightViewIndex = 0;
      mDisplayOffset = 0;
      mCurrentX = 0;
      mNextX = 0;
      mMaxX = Integer.MAX_VALUE;
      mScroller = new Scroller(getContext());
      mGesture = new GestureDetector(getContext(), mOnGesture);
  }
  
  @Override
  public void setOnItemSelectedListener(AdapterView.OnItemSelectedListener listener) {
      mOnItemSelected = listener;
  }
  
  @Override
  public void setOnItemClickListener(AdapterView.OnItemClickListener listener){
      mOnItemClicked = listener;
  }
  
   @Override
   public void setOnItemLongClickListener(AdapterView.OnItemLongClickListener listener) {
      mOnItemLongClicked = listener;
   }
  
   private DataSetObserver mDataObserver = new DataSetObserver() {
  
      @Override
      public void onChanged() {
          synchronized(HorizontalListView.this){
              mDataChanged = true;
          }
          invalidate();
          requestLayout();
      }
  
      @Override
      public void onInvalidated() {
          reset();
          invalidate();
          requestLayout();
      }
  
  };
  
   @Override
   public ListAdapter getAdapter() {
      return mAdapter;
   }
  
   @Override
   public View getSelectedView() {
      //TODO: implement
      return null;
   }
  
  @Override
  public void setAdapter(ListAdapter adapter) {
      if(mAdapter != null) {
          mAdapter.unregisterDataSetObserver(mDataObserver);
      }
      mAdapter = adapter;
      mAdapter.registerDataSetObserver(mDataObserver);
      reset();
   }
  
    /**
    * @param visibleOnly - If set to true, then height is calculated
    * only using visible views. If set to false then height is
   * calculated using _all_ views in adapter. Default is true.
  * Be very careful when passing false, as this may result in
  </code></pre>
  
  <p>* significant performance hit for larger number of views.
      */
      public void setHeightMeasureMode(boolean visibleOnly) {
          if(mMeasureHeightForVisibleOnly != visibleOnly) {
              mMeasureHeightForVisibleOnly = visibleOnly;
              requestLayout();
          }
       }</p>
  
  <pre><code> private synchronized void reset(){
      initView();
      removeAllViewsInLayout();
      requestLayout();
  }
  
   @Override
   public void setSelection(int position) {
      //TODO: implement
   }
  
  private void addAndMeasureChild(final View child, int viewPos) {
      LayoutParams params = child.getLayoutParams();
      if(params == null) {
          params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
      }
  
      addViewInLayout(child, viewPos, params, true);
      child.measure(MeasureSpec.makeMeasureSpec(getWidth(), MeasureSpec.AT_MOST),
              MeasureSpec.makeMeasureSpec(getHeight(), MeasureSpec.AT_MOST));
   }
  
   @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  
      if(MeasureSpec.getMode(heightMeasureSpec) != MeasureSpec.EXACTLY) {
          int height = 0;
  
          if(mMeasureHeightForVisibleOnly) {
              int childCount = getChildCount();
              for(int i = 0; i &lt; childCount; i++) {
                  View v = getChildAt(i);
                  v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
                  if(v.getMeasuredHeight() &gt; height) {
                      height = v.getMeasuredHeight();
                  }
              }
          } else {
  
              /* Traverses _all_ views! Bypasses view recycler! */
  
              HashMap&lt;Integer, View&gt; mRecycler = new HashMap&lt;Integer, View&gt;();
              int childCount = getAdapter().getCount();
              for(int i = 0; i &lt; childCount; i++) {
                  int type = getAdapter().getItemViewType(i);
                  View convertView = mRecycler.get(type);
                  View v = getAdapter().getView(i, convertView, this);
                  mRecycler.put(type, v);
  
                  v.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
                  if(v.getMeasuredHeight() &gt; height) {
                      height = v.getMeasuredHeight();
                  }
              }
          }
  
          if(MeasureSpec.getMode(heightMeasureSpec) == MeasureSpec.AT_MOST) {
              int maxHeight = MeasureSpec.getSize(heightMeasureSpec);
              if(maxHeight &lt; height) {
                  height = maxHeight;
              }
          }
  
          setMeasuredDimension(getMeasuredWidth(), height);
      }
  }
  
   @Override
   protected synchronized void onLayout(boolean changed, int left, int top,
                                                        int right, int bottom) {
      super.onLayout(changed, left, top, right, bottom);
  
      if(mAdapter == null){
          return;
      }
  
      if(mDataChanged){
          int oldCurrentX = mCurrentX;
          initView();
          removeAllViewsInLayout();
          mNextX = oldCurrentX;
          mDataChanged = false;
      }
  
      if(mScroller.computeScrollOffset()){
          int scrollx = mScroller.getCurrX();
          mNextX = scrollx;
      }
  
      if(mNextX &lt;= 0){
          mNextX = 0;
          mScroller.forceFinished(true);
      }
      if(mNextX &gt;= mMaxX) {
          mNextX = mMaxX;
          mScroller.forceFinished(true);
      }
  
      int dx = mCurrentX - mNextX;
  
      removeNonVisibleItems(dx);
      fillList(dx);
      positionItems(dx);
  
      mCurrentX = mNextX;
  
      if(!mScroller.isFinished()){
          post(new Runnable(){
              public void run() {
                  requestLayout();
              }
          });
  
      }
   }
  
   private void fillList(final int dx) {
      int edge = 0;
      View child = getChildAt(getChildCount()-1);
      if(child != null) {
          edge = child.getRight();
      }
      fillListRight(edge, dx);
  
      edge = 0;
      child = getChildAt(0);
      if(child != null) {
          edge = child.getLeft();
      }
      fillListLeft(edge, dx);
  
  
   }
  
   private void fillListRight(int rightEdge, final int dx) {
      while(rightEdge + dx &lt; getWidth() &amp;&amp; mRightViewIndex &lt; mAdapter.getCount()) {
  
          View child = mAdapter.getView(mRightViewIndex, mRemovedViewQueue.poll(), this);
          addAndMeasureChild(child, -1);
          rightEdge += child.getMeasuredWidth();
  
          if(mRightViewIndex == mAdapter.getCount()-1) {
              mMaxX = mCurrentX + rightEdge - getWidth();
          }
  
          if (mMaxX &lt; 0) {
              mMaxX = 0;
          }
          mRightViewIndex++;
      }
  
  }
  
   private void fillListLeft(int leftEdge, final int dx) {
      while(leftEdge + dx &gt; 0 &amp;&amp; mLeftViewIndex &gt;= 0) {
          View child = mAdapter.getView(mLeftViewIndex, mRemovedViewQueue.poll(), this);
          addAndMeasureChild(child, 0);
          leftEdge -= child.getMeasuredWidth();
          mLeftViewIndex--;
          mDisplayOffset -= child.getMeasuredWidth();
      }
  }
  
  private void removeNonVisibleItems(final int dx) {
      View child = getChildAt(0);
      while(child != null &amp;&amp; child.getRight() + dx &lt;= 0) {
          mDisplayOffset += child.getMeasuredWidth();
          mRemovedViewQueue.offer(child);
          removeViewInLayout(child);
          mLeftViewIndex++;
          child = getChildAt(0);
  
      }
  
      child = getChildAt(getChildCount()-1);
      while(child != null &amp;&amp; child.getLeft() + dx &gt;= getWidth()) {
          mRemovedViewQueue.offer(child);
          removeViewInLayout(child);
          mRightViewIndex--;
          child = getChildAt(getChildCount()-1);
      }
  }
  
   private void positionItems(final int dx) {
      if(getChildCount() &gt; 0){
          mDisplayOffset += dx;
          int left = mDisplayOffset;
          for(int i=0;i&lt;getChildCount();i++){
              View child = getChildAt(i);
              int childWidth = child.getMeasuredWidth();
              child.layout(left, 0, left + childWidth, child.getMeasuredHeight());
              left += childWidth;
          }
      }
  }
  
  public synchronized void scrollTo(int x) {
      mScroller.startScroll(mNextX, 0, x - mNextX, 0);
      requestLayout();
  }
  
   @Override
   public boolean dispatchTouchEvent(MotionEvent ev) {
       boolean handled = super.dispatchTouchEvent(ev);
      handled |= mGesture.onTouchEvent(ev);
      return handled;
   }
  
   protected boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
              float velocityY) {
      synchronized(HorizontalListView.this){
          mScroller.fling(mNextX, 0, (int)-velocityX, 0, 0, mMaxX, 0, 0);
      }
      requestLayout();
  
      return true;
   }
  
    protected boolean onDown(MotionEvent e) {
      mScroller.forceFinished(true);
      return true;
   }
  
   private OnGestureListener mOnGesture = new GestureDetector.SimpleOnGestureListener() {
  
      @Override
      public boolean onDown(MotionEvent e) {
          return HorizontalListView.this.onDown(e);
      }
  
      @Override
      public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
              float velocityY) {
          return HorizontalListView.this.onFling(e1, e2, velocityX, velocityY);
      }
  
      @Override
      public boolean onScroll(MotionEvent e1, MotionEvent e2,
              float distanceX, float distanceY) {
  
          synchronized(HorizontalListView.this){
              mNextX += (int)distanceX;
          }
          requestLayout();
  
          return true;
      }
  
      @Override
      public boolean onSingleTapConfirmed(MotionEvent e) {
          Rect viewRect = new Rect();
          for(int i=0;i&lt;getChildCount();i++){
              View child = getChildAt(i);
              int left = child.getLeft();
              int right = child.getRight();
              int top = child.getTop();
              int bottom = child.getBottom();
              viewRect.set(left, top, right, bottom);
              if(viewRect.contains((int)e.getX(), (int)e.getY())){
                  if(mOnItemClicked != null){
                      mOnItemClicked.onItemClick(HorizontalListView.this, child, 
   mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                  }
                  if(mOnItemSelected != null){
                      mOnItemSelected.onItemSelected(HorizontalListView.this, child, 
      mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
                  }
                  break;
              }
  
          }
          return true;
      }
  
      @Override
      public void onLongPress(MotionEvent e) {
          Rect viewRect = new Rect();
          int childCount = getChildCount();
          for (int i = 0; i &lt; childCount; i++) {
              View child = getChildAt(i);
              int left = child.getLeft();
              int right = child.getRight();
              int top = child.getTop();
              int bottom = child.getBottom();
              viewRect.set(left, top, right, bottom);
              if (viewRect.contains((int) e.getX(), (int) e.getY())) {
                  if (mOnItemLongClicked != null) {
                      mOnItemLongClicked.onItemLongClick(HorizontalListView.this, child, 
       mLeftViewIndex + 1 + i, mAdapter.getItemId(mLeftViewIndex + 1 + i));
                  }
                  break;
              }
  
          }
      }
  
     };
  
  
  
     }
  </code></pre>