0

私はを持っておりListViewTimer私はを呼び出すことによってこのリストのスクロールの動きを制御しますsmoothScrollToPositionFromTop(position, offset, duration)。にListViewはのリスナーがありOnItemClickListenerます。

スムーズスクロール中にアイテムをクリックすると、スクロールは停止しますが、onItemClickイベントはトリガーされません。これを行うには、アイテムをもう一度クリックする必要があります。

この動作をオーバーライドする方法を知りたいです。つまり、スムーズなスクロールが行われているときにアイテムをクリックすると、スクロールを停止する以外に、クリックされたアイテムをトリガーしたいということですonItemClick

これを行う簡単な方法があるかどうかは本当にわかりません。GestureDetectorリストのを試してみて、そこに電話をかけるためOnTouchListenerに聞いていますが、プレスされているアイテムの位置をから取得する方法がわかりません。onSingleTapConfirmedperformClickMotionEvent

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内部で行っていたことを追加し、リストからonSingleTapConfirmed削除しました。そのため、クリックをシミュレートする関数OnItemClickListenerも追加しました。playSoundEffect

最後の行ではListView、スムーズスクロールが行われていないときにのみ行が強調表示されるため、クリック時の強調表示を無効にします。これを無効にすると、クリックするたびに同じ動作が得られます。

于 2012-10-11T16:42:52.947 に答える