listView внутри ViewFlipper - проблемы с прокруткой - PullRequest
2 голосов
/ 18 февраля 2011

У меня проблемы с моим litView внутри моего viewFlipper.

    // GestureDetector
class MyGestureDetector extends SimpleOnGestureListener {
    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        try {
            if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
                return false;
            // Right to left swipe
            if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                IconManager.INSTANCE.leftSwipe();
                vf.setInAnimation(slideLeftIn);
                vf.setOutAnimation(slideLeftOut);
                vf.showNext();
                System.out.println("SWIIINGG!!");
                // Left to right swipe
            }  else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
                IconManager.INSTANCE.rightSwipe();
                vf.setInAnimation(slideRightIn);
                vf.setOutAnimation(slideRightOut);
                vf.showPrevious();
            }
        } catch (Exception e) {
            // nothing
        }
        return false;
    }
    @Override
    public boolean onSingleTapConfirmed(MotionEvent e) {
        Log.e("Item Click","Item Click");

        Intent intentAgenda = new Intent (Activity_Main.this, AgendaSelected.class);
        //intentAgenda.putExtra("LECTURE_NAME", homeAgendaListAdapter.getItemId(3));
        startActivity(intentAgenda);
        return super.onSingleTapConfirmed(e);
    }
}

Этот код позволяет мне переключаться между представлениями в флиппере и прокручивать списки в различных флипах. Тем не менее, это делает мое целое приложение интерактивным. Даже если я singleTap на пустой поверхности, он регистрирует щелчок и отправляет меня туда, куда Intent intentAgenda = new Intent хочет отправить меня. Это должно происходить только тогда, когда я нажимаю на элемент в пределах listView!

Что я могу сделать, чтобы слушатель в определенных списках слушал только «в списках», а не все приложение? Я считаю, что проблема заключается в public boolean onSingleTapConfirmed, но я не вижу этого.

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

Я не пробовал описанное выше, но одно решение, которое действительно работает, - это создать новый OnItemClickListener, а затем установитьOnItemClickListener (прослушиватель щелчков вашего элемента) в ваших списках.Это будет означать, что в вашем случае не нужно использовать одно касание, а просто создать новый прослушиватель щелчка элементов, как этот, но более стильный:

    list.setOnItemClickListener(new OnItemClickListener() {

        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            Intent intentAgenda = new Intent (Activity_Main.this, AgendaSelected.class);
            //      //          intentAgenda.putExtra("LECTURE_NAME", homeAgendaListAdapter.getItemId(3));
            startActivity(intentAgenda);
        }
    });

Если вы хотите создать больше списков, вы можете создать слушателя щелчка нового элемента ипросто укажите каждый список на него.

1 голос
/ 18 февраля 2011

Поскольку ViewFlipper, содержащий списки, имеет один и тот же gestListener, все, что находится в пределах видоискателя, который будет нажат, вызовет метод onSingleTapConfirmed (). Попробуйте зарегистрировать списки в отдельном списке жестов, а также обрабатывать только касания :) Похоже, проблема не в этом кодовом блоке, а в том месте, где установлены жесты и т. д.

...