我有一个ListView
和一个Timer
我通过调用控制此列表的滚动运动smoothScrollToPositionFromTop(position, offset, duration)
。 该ListView
有一个听众OnItemClickListener
。
如果在平滑滚动的情况是点击一个项目,滚动停止,但onItemClick
事件未被触发。 为了做到这一点,你需要在项目再次点击。
我想知道如何重写此行为。 我的意思是, 如果我在项目上点击而平滑滚动 , 从停止滚动发生 ,除了, 我想触发onItemClick
上单击的项目 。
我真的不知道,如果有一个简单的方法来做到这一点。 我试着用GestureDetector
为OnTouchListener
名单,我听onSingleTapConfirmed
为了调用performClick
在那里,但我不知道如何从该项目是按位置MotionEvent
。
我终于找到了一个解决方案,通过使用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
点击线以来得到了强调,只有当平滑滚动没有发生。 通过禁用它,我获得每次点击的相同的行为。