Android 如何修复返回其他数字的onClick cardView

Android 如何修复返回其他数字的onClick cardView,android,mobile,android-recyclerview,android-cardview,Android,Mobile,Android Recyclerview,Android Cardview,我有一个回收商,显示了一个项目清单,有价格和状态。当我点击一张卡片时,我希望它显示我点击的物品的价格。然而,每当我点击。该卡返回其他卡的数据,而不是我单击的特定卡的数据 public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemHolder> { private TextView viewName, viewPrice; private CheckBox viewAvailability; p

我有一个回收商,显示了一个项目清单,有价格和状态。当我点击一张卡片时,我希望它显示我点击的物品的价格。然而,每当我点击。该卡返回其他卡的数据,而不是我单击的特定卡的数据

    public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemHolder> {
private TextView viewName, viewPrice;
private CheckBox viewAvailability;

private Context context;
private List<Item> listItems;

@NonNull
@Override
public ItemAdapter.ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
    return new ItemAdapter.ItemHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ItemAdapter.ItemHolder holder, int position) {
    Item item = listItems.get(position);
    holder.setDetails(item);

}

@Override
public int getItemCount() {
    return listItems.size();
}


public class ItemHolder extends RecyclerView.ViewHolder {
    public ItemHolder(final View itemView) {
        super(itemView);
        viewName = itemView.findViewById(R.id.viewName);
        viewPrice = itemView.findViewById(R.id.viewPrice);
        viewAvailability = itemView.findViewById(R.id.viewAvailability);


        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


            }
        });
    }

    public void setDetails(Item item) {
        viewName.setText(item.getName());
        viewPrice.setText(item.getPrice());
        int as = item.getAvailabilityStatus();

        if (as == 1) {
            viewAvailability.setChecked(true);
        } else {
        }
    }
}

public ItemAdapter(Context context, List<Item> objects) {
    this.context = context;
    this.listItems = objects;
}
公共类ItemAdapter扩展了RecyclerView.Adapter{ 私有文本视图视图名称、视图价格; 私家车的可用性; 私人语境; 私人物品清单; @非空 @凌驾 public ItemAdapter.ItemHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){ 视图=LayoutFlater.from(上下文)。充气(R.layout.list_项,父项,false); 返回新的ItemAdapter.ItemHolder(视图); } @凌驾 public void onBindViewHolder(@NonNull ItemAdapter.ItemHolder holder,int位置){ Item=listItems.get(位置); 持有人信息(项目); } @凌驾 public int getItemCount(){ 返回listItems.size(); } 公共类ItemHolder扩展了RecyclerView.ViewHolder{ 公共项目持有者(最终视图项目视图){ 超级(项目视图); viewName=itemView.findViewById(R.id.viewName); viewPrice=itemView.findViewById(R.id.viewPrice); viewAvailability=itemView.findViewById(R.id.viewAvailability); itemView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ } }); } 公共作废设置详细信息(项目){ viewName.setText(item.getName()); viewPrice.setText(item.getPrice()); int as=item.getAvailabilityStatus(); 如果(as==1){ viewAvailability.setChecked(true); }否则{ } } } 公共项适配器(上下文、列表对象){ this.context=上下文; this.listItems=对象; }
}

尝试此代码,将itemView onclick listner放入setDetails中

public void setDetails(Item item) {
        viewName.setText(item.getName());
        viewPrice.setText(item.getPrice());
        int as = item.getAvailabilityStatus();

        if (as == 1) {
            viewAvailability.setChecked(true);
        } else {
        }

        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                // here you will able to access valid item
            }
        });
    }

代替
itemView.setOnClickListener
在cardView上使用set clickListener,并使用
getAdapterPosition()
跟踪单击的项目

 cardView= itemView.findViewById(R.id.cardView);

        cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            int price = getThePrice(getAdapterPosition());
            // use price here
            }
        });
您必须在此处创建
getThePrice()
方法,该方法将返回您单击的商品的价格。

请尝试以下代码

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemHolder> {


private Context context;
private List<Item> listItems;

@NonNull
@Override
public ItemAdapter.ItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(context).inflate(R.layout.list_item, parent, false);
    return new ItemHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ItemAdapter.ItemHolder holder, int position) {
    Item item = listItems.get(position);
    holder.viewName.setText(item.getName());
    holder.viewPrice.setText(item.getPrice());
    int as = item.getAvailabilityStatus();

    if (as == 1) {
        holder.viewAvailability.setChecked(true);
    } else {
        holder.viewAvailability.setChecked(false);
    }

}

@Override
public int getItemCount() {
    return listItems.size();
}


public class ItemHolder extends RecyclerView.ViewHolder {

    private TextView viewName, viewPrice;
    private CheckBox viewAvailability;

    public ItemHolder(final View itemView) {
        super(itemView);
        viewName = itemView.findViewById(R.id.viewName);
        viewPrice = itemView.findViewById(R.id.viewPrice);
        viewAvailability = itemView.findViewById(R.id.viewAvailability);




        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {


            }
        });
    }
}

public ItemAdapter(Context context, List<Item> objects) {
    this.context = context;
    this.listItems = objects;
}
公共类ItemAdapter扩展了RecyclerView.Adapter{ 私人语境; 私人物品清单; @非空 @凌驾 public ItemAdapter.ItemHolder onCreateViewHolder(@NonNull ViewGroup父级,int viewType){ 视图=LayoutFlater.from(上下文)。充气(R.layout.list_项,父项,false); 返回新项目持有者(视图); } @凌驾 public void onBindViewHolder(@NonNull ItemAdapter.ItemHolder holder,int位置){ Item=listItems.get(位置); holder.viewName.setText(item.getName()); holder.viewPrice.setText(item.getPrice()); int as=item.getAvailabilityStatus(); 如果(as==1){ holder.viewAvailability.setChecked(true); }否则{ holder.viewAvailability.setChecked(false); } } @凌驾 public int getItemCount(){ 返回listItems.size(); } 公共类ItemHolder扩展了RecyclerView.ViewHolder{ 私有文本视图视图名称、视图价格; 私家车的可用性; 公共项目持有者(最终视图项目视图){ 超级(项目视图); viewName=itemView.findViewById(R.id.viewName); viewPrice=itemView.findViewById(R.id.viewPrice); viewAvailability=itemView.findViewById(R.id.viewAvailability); itemView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图){ } }); } } 公共项适配器(上下文、列表对象){ this.context=上下文; this.listItems=对象; }
}

您用于onClick的代码在哪里?在onClick内部,您什么也没做。您在Empty中的onClick方法可以解释原因,提问者,使用了正确的方法在
ItemHolder
中执行单击…在
onBindViewHolder
methodin setDetails方法中执行clik的背后原因是什么?如果item.getName()和item.getPrice()传递了有效的item对象如果有效,则单击确定他将访问适当的项目对象