在android中,onlongclick在ontouchevent之后没有调用

时间:2014-07-18 10:09:59

标签: android android-view

我创建了一个名为RecorderView的新view,在这个类中有一个onTouchEvent(),如下所示,

@Override
    public boolean onTouchEvent(MotionEvent event) {

        if (isRecording) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                Log.d("JM", "ACTION_DOWN");
                return false;
            }

            if (event.getAction() == MotionEvent.ACTION_UP) {
                Log.d("JM", "ACTION_UP");
                handler.removeCallbacks(runnable);
                stopRecord();
            }
            return true;
        }
        return false;

    }

然后这个视图通过扩展BaseAdapter在listview中膨胀,并且在getView()里面有一个setOnLongClickListener(),如下所示

holder.recordView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.d("JM", "On list item clicked");
                holder.recordView.startRecord();
                return false;
            }
        });

现在问题是setOnLongClickListener()没有执行。

我想在最近两天解决这个问题。但仍未解决。

2 个答案:

答案 0 :(得分:1)

您是否尝试使用OnItemLongClick来实现您的目标?我相信您希望ListView的每个项目都响应OnLongClick,对吗?

答案 1 :(得分:0)

当您为任何视图覆盖onTouchEvent时,onTouchEvent仅使用longpressed。 Here是一个有用的帖子,使用提到的解决方案,您可以使用onTouchEvent实现长按。

textView.setOnTouchListener(new View.OnTouchListener() {

    private static final int MIN_CLICK_DURATION = 1000;
    private long startClickTime;

    @Override
    public boolean onTouch(View v, MotionEvent event) {

        switch (event.getAction()) {
        case MotionEvent.ACTION_UP:
            longClickActive = false;
            break;
        case MotionEvent.ACTION_DOWN:
            if (longClickActive == false) {
                longClickActive = true;
                startClickTime = Calendar.getInstance().getTimeInMillis();
            }
            break;
        case MotionEvent.ACTION_MOVE:
            if (longClickActive == true) {
                long clickDuration = Calendar.getInstance().getTimeInMillis() - startClickTime;
                if (clickDuration >= MIN_CLICK_DURATION) {
                    Toast.makeText(MainActivity.this, "LONG PRESSED!",Toast.LENGTH_SHORT).show();
                    longClickActive = false;
                }
            }
            break;
        }
        return true;
    }
});

其中private boolean longClickActive = false;是一个类变量。