我已经为我的列表视图项目实现了一个手势检测器,在检测到 onfling 手势时,将显示两个按钮。前几个列表项运行良好。
但是,当我滚动到列表视图的底部时,onfling 不适用于列表视图的最后一项,因此没有显示两个按钮。PS:我仍然能够获得最后一个列表项的位置。我目前正在我的 ListFragment 类中实现这一点。
我应该怎么做才能使 onFling 能够处理我的最后一个列表项?感谢您的任何帮助。
用代码编辑
public class ExampleFragment extends ListFragment{
protected GestureDetector gestureDetector;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
gestureDetector = new GestureDetector(getActivity(), new MyGestureDetector());
getListView().setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (gestureDetector.onTouchEvent(event)) {
MotionEvent cancelEvent = MotionEvent.obtain(event);
cancelEvent.setAction(MotionEvent.ACTION_CANCEL);
v.onTouchEvent(cancelEvent);
return true;
}
return false;
}
});
}
class MyGestureDetector extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
int pos = getListView().pointToPosition((int)e1.getX(), (int)e1.getY());
try {
if (Math.abs(e1.getY() - e2.getY()) > SWIPE_MAX_OFF_PATH)
return false;
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(getActivity(), "Left Swipe", Toast.LENGTH_SHORT).show();
} else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
Toast.makeText(getActivity(), "Right Swipe", Toast.LENGTH_SHORT).show();
View v = getListView().getChildAt(pos);
if (v != null) {
Button edit = (Button) v.findViewById(R.id.edit);
Button connect = (Button) v.findViewById(R.id.connect);
if (edit.getVisibility() == View.GONE && connect.getVisibility() == View.GONE){
edit.setVisibility(View.VISIBLE);
connect.setVisibility(View.VISIBLE);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}