Closed keepgoodfeeling closed 6 years ago
是否使用的是 adapter.setItemChildClickListener ,Demo里面的ItemClick有专门的详细使用方法,也可参考此链接 https://github.com/CymChad/BaseRecyclerViewAdapterHelper/wiki/Add-OnItemClickLister
adapter.setOnItemLongClickListener(new BaseQuickAdapter.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(BaseQuickAdapter adapter, View view, int position) {
Log.d(TAG, "onItemLongClick: ");
Toast.makeText(ItemClickActivity.this, "onItemLongClick" + position, Toast.LENGTH_SHORT).show();
return false;
}
});
是用这种方法设置的,我改了demo中的ItemDrag and Swipe 类,也发现有同样的问题:有点击事件时,长按事件是失效的;
public class ItemDragAdapter extends BaseItemDraggableAdapter<String, BaseViewHolder> {
public ItemDragAdapter(List data) {
super(R.layout.item_draggable_view, data);
}
@Override
protected void convert(BaseViewHolder helper, String item) {
switch (helper.getLayoutPosition() %
3) {
case 0:
helper.setImageResource(R.id.iv_head, R.mipmap.head_img0);
break;
case 1:
helper.setImageResource(R.id.iv_head, R.mipmap.head_img1);
break;
case 2:
helper.setImageResource(R.id.iv_head, R.mipmap.head_img2);
break;
}
helper.setText(R.id.tv, item);
helper.addOnClickListener(R.id.iv_head);
helper.addOnClickListener(R.id.email);
helper.addOnClickListener(R.id.iv);
}
}
这是写的点击事件的实现:
mAdapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() {
@Override
public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
switch (view.getId()) {
case R.id.iv:
ToastUtils.showShortToast("点击了拖动图片了");
break;
case R.id.iv_head:
ToastUtils.showShortToast("点击了头像了");
break;
case R.id.email:
ToastUtils.showShortToast("点击了email了");
break;
}
}
});
@AllenCoder 感谢回复,请指教一下.以前用的时候,功能简单,没有问题,这次的需求比较复杂:三种类型的item,在一个recyclerView中,要求可以长按拖动改变item的顺序;并且每个item中都有自己子view的多个点击事件,当设置点击事件后,长按拖动就失效了. 只能长按item没有设置点击事件的地方才会响应拖动事件。 非常感谢!
view onClick 和 onLongClick 是有时间判断的。我上次看远吗好像是 100ms 和 400ms 你可以看看swipeview 中是不是没有处理 onclick时间判断。
我自己写了个接口回调,解决了这个问题。但感觉不够优雅,使用框架的达不到需求;
mDynamicAdapter.setOnLongClickListener(new DynamicAdapter.OnItemLongClickListener() {
@Override
public boolean OnLongClick(BaseViewHolder helper, int type) {
//手动从adapter 的
//protected void convert(final BaseViewHolder helper, DynamicBean item)
//实现中传参,调用api,解决了这个问题,但感觉不够优雅。
mItemTouchHelper.startDrag(helper);
return true;
}
});
@HarkBen 谢谢。
item的子控件有点击事件时,长按子控件拖动事件失效。只有没有设置点击事件的view可以长按拖动;
item的子控件没有点击事件时,长按该item的子控件可以正常拖动。