我需要修改onItemLongClick的失效(默认持续时间对于老人来说太快了)。有人能帮助我吗?
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
// Do something
...
}
});
答案 0 :(得分:3)
使用OnItemLongClickListener
无法实现此目的,您需要自己实施OnTouchListener
来定义/确定长时间点击持续时间。
我现在没有可能测试代码,但是这应该给你一个基本的想法从哪里开始:
private long mTimestampDown;
private long mTimestampUp;
private final int longPressDurationMs = 2000; // 2 seconds
private boolean isLongPress = false;
@Override
public boolean onTouchEvent(MotionEvent e) {
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
mTimestampDown = System.currentTimeMillis();
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
mTimestampUp = System.currentTimeMillis();
if(mTimestampUp - mTimestampDown > longPressDurationMs)
isLongPress = true;
break;
default:
break;
}
return isLongPress;
}
您的课程应扩展OnTouchListener
。
答案 1 :(得分:0)
为什么不使用OnTouchListener
?
定义您的持续时间,并检查ACTION_DOWN
上的触摸时间。
在ACTION_UP
:
if ( the time > your duration ) {
do the job you want
}
答案 2 :(得分:0)
也许这不是优雅和完美但有2个全局变量(IsDown和位置)我可以解决我的问题。
listview.setOnTouchListener(new AdapterView.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent e) {
switch (e.getAction()) {
case MotionEvent.ACTION_DOWN:
setIsDown(true);
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
setIsDown(false);
break;
default:
break;
}
return false;
}
});
listview.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
setPosition(position);
final Handler h = new Handler();
h.postDelayed(new Runnable()
{
@Override
public void run()
{
if (getIsDown()) {
// Do something
...
}
}
}, 1000); // milliseconds added to longpress
return true;
}
});