Обновление: см. раздел "Баунти для расширенного вопроса".
У меня есть установка GestureDetector
на ListView
. ListView - это целый фрагмент, который поступает со стороны окна и частично перекрывает другой фрагмент. Я хочу дать пользователю возможность пронести его близко (т.е. Wunderlist - отличный пример этой функции с правой стороны).
Вот моя настройка:
gestureListener = new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
return true;
}
return false;
}
};
listView.setOnTouchListener(gestureListener);
Сам приемник:
public class GestureListener extends SimpleOnGestureListener {
private static final int SWIPE_MIN_DISTANCE = 180;
private static final int SWIPE_THRESHOLD_VELOCITY = 50;
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
try {
if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE
&& Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
FragmentManager fma = getActivity()
.getSupportFragmentManager();
FragmentManager fm = getFragmentManager();
FragmentTransaction t = fm.beginTransaction();
SherlockListFragment mFrag = new RateReviewFragment();
t.add(R.id.main_frag, mFrag);
t.setCustomAnimations(R.anim.animation_enter,
R.anim.animation_leave);
t.remove(mFrag);
t.commit();
}
return false;
} catch (Exception e) {
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
// edited out; this opens up a context menu
}
}
Иногда, когда ListView
прокручивается вниз (или прокрутка списка прерывается щелчками по строке списка), GestureListener
просто останавливается... прослушивает. Прокрутка не будет работать. Вам нужно прокрутить страницу назад, чтобы заставить ее снова работать.
Если кто-то может помочь мне изолировать эти проблемы, я был бы благодарен!
ОБНОВЛЕНИЕ: остается только одна проблема: "слушатель перестает слушать"
ОБНОВЛЕНИЕ ДВА: Возможно, я понял, что это такое; просто не знаю, исправить:
Я нашел что-то после регистрации моих действий; Чем ниже я попадаю в список (и чем больше я взаимодействую с ним), измерения не согласуются. Например, если я перемещаю палец на сантиметр влево и вправо - в самом верху списка, он скажет, что я переместился, например, на 200 пикселей. Но когда у меня возникла проблема, указанная выше, она намного ниже, может быть, 50, для ИМЕЮЩЕГО 1 см расстояния. Поэтому окно не закрывается, потому что оно не соответствует моим условиям if
.
Sidenote: я уже неоднократно заявлял, что проблема заключается в том, что "взаимодействует со списком". Это означает: если я быстро прокручу сверху вниз; нет проблем; но если я медленно прокладываю себе путь, возможно, нажав на экран, прокручивая и выключаю, нажимая кнопки на ListView
, некоторые из которых открывают новую активность (а затем возвращаются в ту же позицию), это "взаимодействует", с".