Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获取gridview中视图的单击、双击和长时间单击手势?_Java_Android_Gridview_Onlongclicklistener_Gesturedetector - Fatal编程技术网

Java 如何获取gridview中视图的单击、双击和长时间单击手势?

Java 如何获取gridview中视图的单击、双击和长时间单击手势?,java,android,gridview,onlongclicklistener,gesturedetector,Java,Android,Gridview,Onlongclicklistener,Gesturedetector,我在GridView中有ImageViews,我使用了一个OnItemClickListener和一个在GridView上设置的OnItemLongClickListener,分别在一个更大的页面上打开图像和删除项目。现在,我必须在GridView中重新排列ImageView,因此我计划将删除功能移动到双击手势(请不要教我android风格的指导原则(包括我建议的上下文操作栏的可能性),因为这是我老板要求在ios应用程序中模拟功能的要求)为了保留长时间的拖放单击。我在自定义适配器的getView

我在GridView中有ImageViews,我使用了一个OnItemClickListener和一个在GridView上设置的OnItemLongClickListener,分别在一个更大的页面上打开图像和删除项目。现在,我必须在GridView中重新排列ImageView,因此我计划将删除功能移动到双击手势(请不要教我android风格的指导原则(包括我建议的上下文操作栏的可能性),因为这是我老板要求在ios应用程序中模拟功能的要求)为了保留长时间的拖放单击。我在自定义适配器的getView中的每个视图上设置了一个OnTouchListener,为GestureDetector提供一个使用onTouchEvent扩展SimpleOnGestureListener给定运动事件的侦听器。我知道该怎么做,但当我包括(当然是onDown,以获得其他回调)onDoubleTap、OnSingleTap确认和onLongPressed时,所有点击都被解释为长点击。当我移除两种回调方法,并再次替换为它们的侦听器对应方法(即McClickListeners)时,我收到了这两种手势,但没有收到双击,这是有意义的,因为双击开始时是一次点击,除非你等待不到一秒钟的时间来确认它们是单打而不是潜在的双打。我还尝试将OnItemClickListener(而不是OnItemLongClickListener)与回调一起放置在扩展的SimpleGestureListener中。在这种情况下,只有长时间的按压被解释,但其他手势没有引起任何反应。这是我现在的代码,请注意,我在onTouchEvent中返回false是为了允许其他人(itemclicklisteners)在GestureDetector中尝试后使用事件

public class MainBoardGridAdapter extends GenericBoardGridAdapter implements OnItemLongClickListener {
    private class Ges extends GestureDetector.SimpleOnGestureListener {
        int pos;
        public Ges(View v) {
            pos = (Integer) v.getTag();
        }
        @Override
        public boolean onDown(MotionEvent me) {
            //this does get called but none of these methods below
            return true;
        }
        @Override
        public boolean onDoubleTap(MotionEvent me) {
            new DeleteConfirmationPrompt(c, "board") {
                @Override
                protected boolean onDeleteConfirmed() {
                    // delete the visionboard
                    return deleteBoard(pos);
                }
            }; // Constructor shows dialog
            return false;
        }
        @Override
        public boolean onSingleTapConfirmed(MotionEvent e) {
            MainBoardGridAdapter.super.flagForUpdate(pos);
            if (listener != null) {
                listener.onBoardClick(pos, getName(pos));
            } else {
                Intent intent = new Intent(c, VisionBoardActivity.class);
                intent.putExtra(VisionBoardActivity.EXTRA_VISION_BOARD_NAME, getName(pos));
                frag.startActivityForResult(intent, MyBoardsFragment.REQUEST_EDIT);
            }
            return false;
        }
    }


    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View v,
        final int pos, long id) {
         Toast.makeText(c, "Long", Toast.LENGTH_LONG).show();
         return false;
    }
    // called by getView of extended adapter
    @Override
    public void onImageLoaded(ImageView iv, String data, View root) {
         iv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
               (new GestureDetector(c, (new Ges(v)))).onTouchEvent(event);
                return false;
            }
         });
    }
}
还请注意,在尝试当前配置之前,我一直在GestureDetector方法的返回值中使用true。没有看到任何差异。 谢谢你宝贵的时间和帮助,我希望有人能指出我做错了什么

-杰克逊

gv.setOnItemLongClickListener(gridAdapter);