android - 获取点击项目在 Recycleview 上的位置
问题描述
我想创建一个回收视图。购物车包含如此多的产品,每当您长按产品列表项时,回收视图将显示一个上下文菜单,然后选择删除以将其从产品列表中删除。但是我在获得要删除的产品的位置时遇到了一些问题。这是我的 Recycle View HOLDER 代码
public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener,View.OnCreateContextMenuListener {
TextView quantity;
TextView name;
TextView price;
ImageView pic;
ImageButton increase;
ImageButton decrease;
int quantityInt=1;
LongClickListener longClickListener;
public int getQuantityInt() {
return quantityInt;
}
void changeQuantityDisplay(int number)
{
quantity.setText(Integer.toString(number));
}
public void setQuantityIntPlus(int quantityInt) {
this.quantityInt = quantityInt+1;
}
public void setQuantityIntMinus(int quantityInt) {
this.quantityInt = quantityInt-1;
}
public MyViewHolder(View itemView) {
super(itemView);
View view=LayoutInflater.from(context).inflate(R.layout.activity_cart,null,false);
name=(TextView)itemView.findViewById(R.id.listproduct_name);
price=(TextView)itemView.findViewById(R.id.listproduct_price);
pic=(ImageView)itemView.findViewById(R.id.listproduct_img);
increase=(ImageButton)itemView.findViewById(R.id.increasebtn);
decrease=(ImageButton)itemView.findViewById(R.id.decreasebtn);
quantity=(TextView) itemView.findViewById(R.id.listproduct_quantity);
itemView.setOnLongClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
public void setLongClickListener(LongClickListener lc)
{
this.longClickListener=lc;
}
@Override
public boolean onLongClick(View v) {
this.longClickListener.onItemLongClick(getLayoutPosition());
return false;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.setHeaderTitle("Settings");
menu.add(0,0,0,"Remove");
}
}
这是 LongClickListener 接口
public interface LongClickListener {
void onItemLongClick(int pos);
}
在函数 onBindViewHolder
@Override
public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
holder.setLongClickListener(new LongClickListener() {
@Override
public void onItemLongClick(int pos) {
Toast.makeText(context, "On Long Clicked", Toast.LENGTH_SHORT).show();
}
});
}
在购物车活动中
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view=LayoutInflater.from(getContext()).inflate(R.layout.activity_cart,container,false);
textView=(TextView)view.findViewById(R.id.totalcost);
//init Arr
initArr();
//Init cart List
cartList=(RecyclerView)view.findViewById(R.id.cartList);
cartListAdapter=new CartRecycleViewAdapter(getContext(),R.layout.card_row_layout,incartArr,textView);
LinearLayoutManager cartListLayoutManager=new LinearLayoutManager(getContext());
cartListLayoutManager.setOrientation(LinearLayout.VERTICAL);
cartList.setLayoutManager(cartListLayoutManager);
cartList.setAdapter(cartListAdapter);
cartList.setItemAnimator(new DefaultItemAnimator());
return view;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
cartListAdapter.getItemSelected(item);
return super.onContextItemSelected(item);
}
解决方案
为每个项目创建一个 MyViewHolder 实例,您可以使用:
getAdapterPosition()
在您的 MyViewHolder 中获取它的项目位置。
如果您在“外部” MyViewHolder 那么您可以致电:
holder.getAdapterPosition()
知道它的项目位置。
推荐阅读
- angular - 从 HttpInterceptor 中的 catchError 返回可观察到的已捕获错误会导致错误循环
- html - Flexbox 内容在表格中有一个像素偏移
- sql-server - 在 SQL 中获取具有连续月份范围的行
- javascript - 转换表单编号字段值结构
- python - 如何使 Django 数据库缓存的条目过期?
- python - 试图制作函数来获取最大行数 Pygame
- javascript - 如何从 React 组件中提取通用逻辑(但通用逻辑是使用 setState)
- ios - 滚动时电子节目指南视图如何更新?
- javascript - 所需的功能是 javascriptenabled 已弃用。我们如何使用 Internet Explorer 驱动程序 selenium 中启用的 java 脚本
- jsgrid - jsGrid不显示表格