android - 如何在android中捕获点击recyclerview
问题描述
所以我有一个 android 应用程序,其中有一个使用 firebase db 显示的项目列表。所以我想要做的是,当我在 recyclerview 中单击项目的右侧时,它会执行一项功能并将一个项目添加到购物车,并且每次单击它时都会这样做,并且当单击左侧时,它会从购物车中删除项目。
我无法弄清楚如何捕获这些点击天气用户点击了右侧或左侧。
如果您使用 tinder 的工作方式,请单击右侧的图片,然后它会更改为下一张图片。
目前我正在使用此代码将用户带到另一个活动并选择数量。请以这种方式帮助我,我的应用程序会更加用户友好且使用起来更有趣。
代码 :
FirebaseRecyclerOptions<Items> options = new FirebaseRecyclerOptions.Builder<Items>().setQuery(firebaseDatabase.child("Items").child(categ).orderByChild("name"), Items.class).build();
FirebaseRecyclerAdapter<Items, UsersViewHolder> firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Items, NewOrder.UsersViewHolder>(options)
{
@Override
public NewOrder.UsersViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.items2,parent,false);
return new NewOrder.UsersViewHolder(view);
}
@Override
protected void onBindViewHolder(NewOrder.UsersViewHolder holder, int position, Items model) {
holder.setName(model.getName());
holder.setDescription(model.getDescription());
holder.setProfilePic(model.getImage());
holder.setPrice(model.getPrice());
final String PID = getRef(position).getKey();
String quant = model.getQuantity().toString();
Integer qtt = Integer.parseInt(quant);
if(qtt <= 5){
holder.setoos();
holder.mview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(NewOrder.this, "Sorry This Product is out of stock!", Toast.LENGTH_SHORT).show();
}
});
}else {
holder.mview.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent profileIntent = new Intent(NewOrder.this, Item.class);
profileIntent.putExtra("Product id", PID);
profileIntent.putExtra("Category", categ);
profileIntent.putExtra("Shop id",shopname);
profileIntent.putExtra("Shopkeeper id",shopid);
startActivity(profileIntent);
}
});
progressBar.setVisibility(View.GONE);
}
};
items.setAdapter(firebaseRecyclerAdapter);
items.setItemViewCacheSize(500);
firebaseRecyclerAdapter.startListening();
}
public class UsersViewHolder extends RecyclerView.ViewHolder {
View mview;
public UsersViewHolder(@NonNull View itemView) {
super(itemView);
mview = itemView;
}
public void setName(String name) {
TextView userNameView = mview.findViewById(R.id.name);
String str = name;
String cap = str.substring(0, 1).toUpperCase() + str.substring(1);
userNameView.setText(cap);
}
public void setDescription(String description) {
TextView userStatusView = mview.findViewById(R.id.description);
userStatusView.setText(description);
}
public void setPrice(String price) {
TextView userStatusView = mview.findViewById(R.id.price);
userStatusView.setText("₹"+price);
}
public void setoos(){
TextView orderstatus = mview.findViewById(R.id.oof);
orderstatus.setVisibility(View.VISIBLE);
}
public void setProfilePic(String profilepic) {
final ImageView image = mview.findViewById(R.id.userSingleImage);
final StorageReference mImageRef =
FirebaseStorage.getInstance().getReference(shopname+"/Product_image/thumbs/"+ profilepic + ".jpg");
final long ONE_MEGABYTE = 1024 * 1024;
mImageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Glide.with(mview)
.load(mImageRef)
.into(image);
}
});
}
解决方案
您可以在 RecyclerView 行的两侧创建 2 个透明布局(可能是 ConstraintLayout)。将 OnClickListeners 附加到它们并在那里做任何你想做的事情。
推荐阅读
- python - TAB 完成在 jupyter notebook 中不起作用并给出错误“NotImplementedError”
- react-native - 使用此命令安装 expo 时如何解决错误(npm install expo-cli --global)
- angular - Angular 8 Pipe - 在订阅之外未定义变量
- python - 限制请求数 Nginx + uWSGI + Flask
- python - 如何创建具有数据科学库支持的 tensorflow gpu docker 容器?
- python - 多类和多标签问题的 ROC 曲线和 AUC。ValueError:目标分数需要是多类 roc_auc 的概率
- db2 - 使用多个存储路径进行 DB2 重定位
- python - unix 时间戳值在使用 pandas 读取时被转换为科学格式
- reactjs - 如何链接 React Context 调度?(挂钩)
- google-compute-engine - 浏览器 GCP 实例中的 SSH - 下载错误