android - RecyclerAdapter - 无法为父母和孩子设置长且正常的点击侦听器
问题描述
我有一个简单RecyclerView
的包含一个图像的行项目。
我想为onClickListener
ImageView 和longClickListener
自身设置一个法线itemView
。
问题是,当这样做时——他们似乎无法彼此生活在一起。如果我为父视图组分配长按并单击子项imageView
-只有子项单击有效。如果我只删除普通点击侦听器的代码,那么长点击就会开始工作。
这是我的适配器-
public class HorizontalRecyclerAdapter extends RecyclerView.Adapter<HorizontalRecyclerAdapter.ViewHolder> {
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_row_item, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(holder.imageView.getContext(), "Long Click!", Toast.LENGTH_SHORT).show();
return true;
}
});
holder.imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(holder.imageView.getContext(), "Normal Click", Toast.LENGTH_SHORT).show();
}
});
}
@Override
public int getItemCount() {
return 10;
}
class ViewHolder extends RecyclerView.ViewHolder {
private ImageView imageView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.imageView);
}
}
}
编辑 -
这是我的 xml 行项目-
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_margin="10dp">
<ImageView
android:id="@+id/imageView"
android:layout_width="50dp"
android:layout_height="50dp"
android:src="@drawable/image1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
解决方案
您必须将 match_parent 指定给 imageview 的高度和宽度。在这种情况下,itemview 不会捕捉到点击事件,因为 imageview 会在此之前捕捉到它。如果是这样,请在 imageview 上设置长按。
推荐阅读
- c# - 如何使用 Firebase 身份验证检索用于使用关联帐户登录的登录方法
- python - 如何将编号行从一个.txt打印到另一个
- bash - 在字符串中查找文本并在下一行替换一些文本
- python - Jupyter 笔记本导入 pyshp 导致“没有名为 pyshp 的模块”
- dart - 如何在 Flutter 中以编程方式关闭应用程序?
- android - 必需:'android.arch.lifecycle.LifecycleOwner 错误
- javascript - 用字母位置替换字母,为什么拼接不去掉多个字符
- c - 如何从共享内存文件(最初是 C 结构)中提取数据到 Go 中?
- sql - 在 Postgresql 中具有复杂连接的 SQL 查询
- javascript - 反应,打印数组的状态并在按钮按下时更新状态