【发布时间】:2019-02-21 07:30:29
【问题描述】:
我想在用户将手放在视图上时做一些工作,并在他释放它时停止它。我的代码如下:
viewHolder.plus.setOnTouchListener(new View.OnTouchListener() {
private Handler mHandler;
@Override
public boolean onTouch(View view, MotionEvent event) {
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
if(mHandler==null)
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
return true;
case MotionEvent.ACTION_UP:
Log.v("this","cancel");
if (mHandler != null) {
mHandler.removeCallbacks(mAction);
mHandler = null;
Log.v("this", "c cancel");
}
break;
}
return false;
}
Runnable mAction = new Runnable() {
@Override public void run() {
ChangeTedad(item.getid(), "plus");
Log.v("this","Cc");
mHandler.postDelayed(this, 500);
}
};
});
问题是,ACTION_UP 永远不会被调用,并且 runnable 会永远运行。
当用户取消触摸它时如何停止运行?
【问题讨论】:
-
你确定吗?我用一个新创建的项目的简单的 hello world 文本视图尝试了你的代码,它工作正常。也许你应该添加视图?
-
@Community 感谢您的帮助,我应该在哪里添加视图?代码在适配器里面,会不会出问题?
-
我认为,只需将查看器的简单布局添加到问题中即可。既然您提到它,适配器也可能导致此问题。你在使用recyclerview吗?还有什么时候添加触摸监听器?
标签: android android-view android-touch-event