2015-10-13 47 views
0

我正在为我的listView(自定义PinnedSectionListView)侦听onTouch事件,但似乎只有在上下滚动时才注册MotionEvents。我主要需要它来响应水龙头。如果我点击细胞,它什么都不做。Fragment中的onTouch事件只注册滚动

在我OnCreateView在我的片段,我有以下代码:

mDetector = new GestureDetectorCompat(mContext, new GestureDetector.SimpleOnGestureListener() { 
      @Override 
      public boolean onDoubleTap(MotionEvent event) { 
       int position = mListView.pointToPosition((int) event.getX(), (int) event.getY()); 
       if (mAdapter.getItem(position) != null) { 
        onClickListItem(mAdapter.getItem(position)); 
       } 
       return true; 
      } 
     }); 

     mListView.setOnTouchListener(new ListView.OnTouchListener() { 
      public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_UP) { 
        Log.d(TAG, "ACTION_UP"); 
        return mDetector.onTouchEvent(event); 
       } 
       if (event.getAction() == MotionEvent.ACTION_DOWN) { 
        Log.d(TAG, "ACTION_DOWN"); 
        return mDetector.onTouchEvent(event); 
       } else { 
        Log.d(TAG, "Action " + event.getAction()); 
        return false; 
       } 
      } 
     }); 

回答

0

要获得产品Click事件,你需要使用onListItemClick,把作为AdapterView.OnItemClickListener接口的一部分来实现。所以你的覆盖将是...

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    // Do something when a list item is clicked 
} 
+0

这种方法似乎并没有产生一个运动事件。你会如何检测单元格上的双击? – Alan

+0

此方法用于检测ListView项目上的轻敲,这是您要求提供的问题。 – NoChinDeluxe

+0

如果您想要检测列表项上的双击,我认为您只能获取双击的x和y坐标,然后您必须手动将其与列表项的坐标进行匹配。按照Google UI指南的建议,使用长按来代替双击是非常简单的。 – NoChinDeluxe