0

我有一个ListView和一个Timer我通过调用来控制这个列表的滚动移动smoothScrollToPositionFromTop(position, offset, duration)。有ListView一个监听器OnItemClickListener

如果在平滑滚动发生时单击项目,则滚动停止但onItemClick不会触发事件。为此,您需要再次单击该项目。

我想知道如何覆盖这种行为。我的意思是,如果我在平滑滚动发生时单击一个项目,除了停止滚动之外,我还想onItemClick在单击的项目上触发。

我真的不知道是否有一种简单的方法可以做到这一点。我尝试使用列表中的 aGestureDetectorOnTouchListener收听onSingleTapConfirmed以便在那里打电话performClick,但我不知道如何从MotionEvent.

4

1 回答 1

0

我终于找到了使用以下方法的解决方案GestureDetector

final GestureDetector gestureDetector = new GestureDetector(MyActivity.this, 
  new GestureDetector.SimpleOnGestureListener(){
    public boolean onSingleTapConfirmed(MotionEvent e) {
        int position = listView.pointToPosition((int)e.getX(), (int)e.getY());
        if(position != ListView.INVALID_POSITION){
            listView.playSoundEffect(SoundEffectConstants.CLICK);
            //onItemClick code goes here
            //or call listView.performItemClick
            return true;
        }
        return false;
    };
});

listView.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return gestureDetector.onTouchEvent(event);
    }
});

listView.setSelector(android.R.color.transparent);

onItemClick就我而言,我在里面添加了我正在做的事情onSingleTapConfirmedOnItemClickListener从列表中删除了。这就是为什么我还添加了playSoundEffect模拟点击的功能。

在最后一行中,我禁用了ListView点击突出显示,因为只有在没有发生平滑滚动时才会突出显示行。通过禁用它,我每次点击都会得到相同的行为。

于 2012-10-11T16:42:52.947 回答