我有ListView
并且Timer
我通过调用smoothScrollToPositionFromTop(position, offset, duration)
来控制此列表的滚动移动。 ListView
有一个OnItemClickListener
的监听器。
如果在平滑滚动发生时单击某个项目,则滚动停止,但不会触发onItemClick
事件。为此,您需要再次单击该项目。
我想知道如何覆盖此行为。我的意思是,如果我在顺利滚动时点击某个项目,除了停止滚动之外,我想在点击的项目上触发onItemClick
。
我真的不知道是否有一种简单的方法可以做到这一点。我尝试使用GestureDetector
获取列表的OnTouchListener
并听取onSingleTapConfirmed
以便在其中调用performClick
,但我不知道如何获取正在按MotionEvent
。
答案 0 :(得分: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
onSingleTapConfirmed
内添加了我正在做的事情,并从列表中删除了OnItemClickListener
。这就是为什么我还添加了playSoundEffect
函数来模拟点击。
在最后一行中,我在ListView
点击时禁用突出显示,因为只有在没有发生平滑滚动时才突出显示行。通过禁用它,我每次点击都会得到相同的行为。