android - Onfling 和 OnTouch 不能一起工作

标签 android android-listview expandablelistview touch-event onfling

我有一个可扩展 ListView 。我正在执行删除每个项目的向左滑动的 listItem。

我正在使用自定义适配器来填充 ListView 项。

public class InsightsListAdapter extends BaseExpandableListAdapter {
@Override
public View getGroupView(final int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    View row = convertView;
    row = inflater_.inflate(R.layout.insight_list_item, null);

    final GestureDetector gdt = new GestureDetector(new GestureListener());
    row.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            swipedViewPosition_=groupPosition;
            swipedView_=v;
            gdt.onTouchEvent(event);
            return true;
        }
    });

    return row;
}

我正在使用如下的 GestureListener

private static final int SWIPE_MIN_DISTANCE = 200;
private static final int SWIPE_THRESHOLD_VELOCITY = 200;

private class GestureListener extends SimpleOnGestureListener {

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
        if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE) {
            System.out.println("Left swiped--------");
            removeListItem();
            return false; // Right to left
        }  
        return false;
    }

}

因为它是一个可扩展 ListView ,所以我在 Activity 中实现了一些点击功能

        insightList_.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                    int groupPosition, long id) {
                System.out.println("Group clicked---------");
                showClear(true);
                selectedItem_ = null;

                return false;
            }
        });

但现在 OnFling 正在被调用。但不是 OnGroupClick()

当我从适配器的 onTouch 事件函数返回 false 时,会调用 OnGroupClick 但不会调用 OnFling()。

要么 Fling 会起作用,要么 OnGroupClick 起作用,但不能同时起作用。

最佳答案

在行的ontouch事件上

row.setOnTouchListener(new OnTouchListener() {[..]

你返回true,那么之后就不会再调用touch事件了,改成return false,touch事件就会折叠到下一个child view。

关于android - Onfling 和 OnTouch 不能一起工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20703985/

相关文章:

android - SDL android NDK 管理返回按钮

安卓支持-v7 CardView : Header textview with other background color does not extend until the edges

android - 为什么带有可点击链接的 ListView 项目不可点击?

android - float 操作按钮在滚动时消失

android widget listview 可点击

android - 有没有办法跟踪这个异常 : focus search returned a view that wasn't able to take focus

android - ListView项目动画: adding one by one with some delay

android - 在 ExpandableListView 中隐藏按钮

Android ExpandableListView 在 ChildView 有单选 CheckBox

android - 如何通过用户输入动态填充 ExpandableListView?