Xamarin GestureDetector OnFling и ListView

Я использую Xamarin, и у меня есть Activity, в котором есть только FrameLayout. В действии у меня также есть вкладки ActionBar (созданные с помощью этой ссылки: http://developer.xamarin.com/guides/android/user_interface/tab_layout/actionbar/ ), который заменяет мой FrameLayout фрагментами, которые существуют из одного небольшого TextView сверху и ListView на остальной части экрана.

Теперь я хочу иметь возможность переключаться между вкладками, и я нашел пример по этой ссылке: http://developer.xamarin.com/recipes/android/other_ux/gestures/create_a_gesture_listener/

Проблема в том, что он реагирует только на пролистывание TextView, а не ListView.

В моей основной деятельности я объявляю

private GestureDetector _gestureDetector;
private int SWIPE_MAX_OFF_PATH = 250;
private int SWIPE_MIN_DISTANCE = 120;
private int SWIPE_THRESHOLD_VELOCITY = 200;

и в OnCreate у меня есть это:

_gestureDetector = new GestureDetector(this);

И мои функции смахивания в моей основной деятельности:

public override bool OnTouchEvent(MotionEvent e)
{
    _gestureDetector.OnTouchEvent(e);
    return false;
}
public bool OnDown(MotionEvent e) { 
    return true; 
}
public bool 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, dvs gå till höger
        if ((e1.GetX () - e2.GetX () > SWIPE_MIN_DISTANCE) && (Math.Abs (velocityX) > SWIPE_THRESHOLD_VELOCITY)) {
            Toast.MakeText (this, "Left Swipe", ToastLength.Short).Show ();
        } 
        // left to right swipe, dvs gå till vänster
        else if ((e2.GetX () - e1.GetX () > SWIPE_MIN_DISTANCE) && (Math.Abs (velocityX) > SWIPE_THRESHOLD_VELOCITY)) {
            Toast.MakeText (this, "Right Swipe", ToastLength.Short).Show ();
        }
    } catch (Exception ex) {
        Console.WriteLine (ex.Message);
    }
    return true;
}
public void OnLongPress(MotionEvent e) {}
public bool OnScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
    return false;
}
public void OnShowPress(MotionEvent e) {}
public bool OnSingleTapUp(MotionEvent e) {
    return false; 
}

Я искал и искал, но нашел только примеры для Java, которые я не могу преобразовать в C # и Xamarin. Что делать? Есть ли еще код, который вам нужно увидеть?


person hericson    schedule 31.12.2014    source источник


Ответы (1)


Вам нужно использовать немного другой подход, когда вы используете ViewPager для поддержки возможности прокрутки. Просто взгляните на этот пример в примерах Xamarin, он немного глючит, но вы можете получить суть из него.

person Alex.F    schedule 01.01.2015
comment
Смахивание работало как шарм, но, как вы сказали, это немного глючит, например, происходит сбой при изменении ориентации (отсутствует конструктор по умолчанию для GenericViewPagerFragment), и я не могу это исправить. И я также не знаю, как обновить свои ListViews с помощью кнопки «Обновить» на панели действий. - person hericson; 01.01.2015