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对象如果有效,则单击确定他将访问适当的项目对象