我创建了一个名为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()没有执行。
我想在最近两天解决这个问题。但仍未解决。
答案 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;是一个类变量。