gridView.setOnItemClickListener 点击没有反应
我个人是因为同时设置了 gridView.setOnTouchListener 和 gridView.setOnItemClickListener,而且在 gridView.setOnTouchListener 没有调用performClick(); 其实他也报错 黄牌了,但是我之前也不理解,现在知道他会把点击动作吞掉,于是就加上performClick();
而且发现 直接在最后写上
v.performClick();
return true;
是不行的,必须这样写
return v.performClick();
//设置了 setOnTouchListener 就不会 监听到 setOnItemClickListener
gridView.setOnTouchListener((v, event) -> {
//v.performClick();
//onTouch lambda should call View#performClick when a click is detected
//event.getAction()
//MotionEvent 当触摸
Log.d("TAG", "initGrid:setOnTouchListener ");
switch (event.getAction()) {
case MotionEvent.ACTION_BUTTON_PRESS:
break;
case MotionEvent.ACTION_DOWN:
//int waitMs=3000;
int waitMs = 2000;
ObjectAnimator.ofFloat(binding.person, MoveConstant.translationX, event.getRawX()).setDuration(waitMs).start();
ObjectAnimator.ofFloat(binding.person, MoveConstant.translationY, event.getRawY()).setDuration(waitMs).start();
//打开一个答题程序
new Handler(message -> {
Log.d("TAG", "initGrid: AlertDialog");
new AlertDialog.Builder(activity).setTitle("恭喜获得碎片").setMessage("恭喜获得碎片").
setPositiveButton("确定", (dialog, which) -> {
}).
setNegativeButton("取消", ((dialog, which) -> {
})).show();
// HttpUtil.post()
return false;
}).sendEmptyMessageDelayed(0, waitMs); // 延迟3秒
break;
default:
break;
}
Log.d("performClick", "initGrid: ");
return v.performClick();
//return true;
});
gridView.setOnItemClickListener((adapterView, view, position, id) -> {
Log.d("adapterView", "initGrid: " + adapterView);
Log.d("view", "initGrid: " + view);
Log.d("position", "initGrid: " + position);
Log.d("id", "initGrid: " + id);
});