java - Bottom Sheet Dialog for RecyclerView Item Click
问题描述
In my recyclerview
there are some items which user can add as favorite.
When user click +
icon for that item, i will open Bottom Sheet Dialog
with 2 buttons. Yes
or No
. Once I hit yes, favorite will be saved.
I generally do this for normal clicks, but how can I implement this to RecyclerView Adapter for any click?
Adapter Class
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
String urlExtension = "http://192.168.1.110/myapp/public/images";
Glide.with(context).load(urlExtension+itemList.get(position).getList_image()).into(holder.imageView_list_city);
holder.textView_list_city_name.setText(itemList.get(position).getList_name());
holder.textView_list_city_desc.setText(itemList.get(position).getList_description());
holder.layout_item_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "add", Toast.LENGTH_SHORT).show();
}
});
holder.layout_item_detail.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "detail", Toast.LENGTH_SHORT).show();
}
});
}
Bottom Sheet Class
public class BottomSheetList extends BottomSheetDialogFragment {
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.bottom_sheet_add, container, false);
return view;
}
}
解决方案
点击后需要定位。
在 ViewHolder 中设置 OnClickListener 并用于getAdapterPosition()
获取单击项目的位置,然后调用鞋底表视图
static class Holder extends RecyclerView.ViewHolder {
Button btnAdd;
OnItemClickListener onItemClickListener;
Holder(final View itemView) {
super(itemView);
btnAdd.setOnClickListener(view -> {
onItemClickListener.onItemClick(getAdapterPosition());
});
}
void setItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
}
界面
interface OnItemClickListener {
void onItemClick(int position);
}
设置监听器
holder.setItemClickListener(this);
@Override
public void onItemClick(int position) {
View modelBottomSheet = LayoutInflater.from(mContext).inflate(R.layout.layout, null);
BottomSheetDialog dialog = new BottomSheetDialog(mContext);
dialog.setContentView(modelBottomSheet);
dialog.show();
}
推荐阅读
- python - 使用 pynput 在随机位置自动单击鼠标(用于网络浏览器游戏)
- python - 在 powershell 中运行 python 文件
- java - 在 JSR 303 bean 验证单元测试中,如何检查违反了哪些约束
- clojure - Clojure 调用一系列函数并存储它们的返回值
- django - 如何通过 id 在 Django 中加入两个模型?
- vue.js - 更改网址后立即停止观看
- ios - 如何在 SwiftUI 中使用图像 CDN?
- python - 如何在命令行上使用“python -c”缩进
- xcode - 由于 pod 链接错误,Flutter 归档构建失败
- postgresql - 如何从 C 列获取值,其中对应的 A 列值在 postgres 的 B 列中有不同的值?