首页 > 解决方案 > 获取点击项目在 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);
}

标签: androidandroid-recyclerviewcontextmenu

解决方案


为每个项目创建一个 MyViewHolder 实例,您可以使用:

getAdapterPosition()

在您的 MyViewHolder 中获取它的项目位置。

如果您在“外部” MyViewHolder 那么您可以致电:

holder.getAdapterPosition()

知道它的项目位置。


推荐阅读