Java recyclerview仅显示单击项目时的最后一个项目

Java recyclerview仅显示单击项目时的最后一个项目,java,android,android-recyclerview,Java,Android,Android Recyclerview,我正在创建一个recycler视图,以显示SQLite数据,包括1blob和integer主键自动递增,以及recycler视图中带有卡片视图的3string值。我已经将edit按钮放在card视图中,以便用户可以单击edit按钮并编辑该SQLite行的详细信息。这是我的recycler view adapter类,然后单击我制作的任何卡上的编辑按钮,将该卡上的意图数据添加到另一个活动 但我的问题是,当点击任何卡片项目时,它只显示最后一个项目作为意图。我觉得我的代码很好 这是我的回收器适配器类

我正在创建一个recycler视图,以显示SQLite数据,包括1blob和integer主键自动递增,以及recycler视图中带有卡片视图的3string值。我已经将edit按钮放在card视图中,以便用户可以单击edit按钮并编辑该SQLite行的详细信息。这是我的recycler view adapter类,然后单击我制作的任何卡上的编辑按钮,将该卡上的意图数据添加到另一个活动

但我的问题是,当点击任何卡片项目时,它只显示最后一个项目作为意图。我觉得我的代码很好

这是我的回收器适配器类

public class RvadapterMyItems extends RecyclerView.Adapter <RvadapterMyItems.MyViewHolder> {

   private Context context;
   Activity activity;
   MyDatabaseHelper myDB;
   InterstitialAd interstitialAd;
   String myitemid, myitemname, myitemprice, myiteminstock, currencystring;
   SharedPreferences share2;
    private static final int EDIT_MY_ITEM = 111;
    byte[] bytes;

   private ArrayList arid, armyitempic, armyitemname, armyitemprice, armyiteminstock;
     int position;
    RvadapterMyItems(Activity activity, Context context, ArrayList arid, ArrayList armyitempic, ArrayList armyitemname, ArrayList armyitemprice, ArrayList armyiteminstock){
        this.activity = activity;
        this.context = context;
        this.arid = arid;
       this.armyitempic = armyitempic;
       this.armyitemname = armyitemname;
       this.armyitemprice = armyitemprice;
       this.armyiteminstock = armyiteminstock;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
      View view =   inflater.inflate(R.layout.cardlayoutmyitems, parent, false);
        return new MyViewHolder(view);
    }



    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull  MyViewHolder holder, int position) {
       
 share2 = context.getSharedPreferences("shopinfo", MODE_PRIVATE);
        if(share2.contains("currency")){
            currencystring = share2.getString("currency", "");
            assert currencystring != null;
            if(currencystring.equals("No")){
                currencystring = "";
            }
        }else{
            currencystring = "";
        }
            myitemid = String.valueOf(arid.get(position));
            myitemname = String.valueOf(armyitemname.get(position));
            myitemprice = String.valueOf(armyitemprice.get(position)+ " "+ currencystring);
            myiteminstock = String.valueOf("Instock: "+ String.valueOf(armyiteminstock.get(position))+ " pcs");

        Bitmap bitmap = DbBitmapUtility.getImage((byte[]) armyitempic.get(position));
        holder.ivmyitem.setImageBitmap(bitmap);
        holder.tvmyitemname.setText(myitemid+ " / "+myitemname);
        holder.tvmyitemprice.setText(myitemprice);
        holder.tvmyiteminstock.setText(myiteminstock);
        bytes = DbBitmapUtility.getBytes(bitmap);

      holder.bteditmyitem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              Intent intent = new Intent(activity, AddMyItem.class);
                intent.putExtra("itemid",myitemid);
                intent.putExtra("itempic",bytes);
                intent.putExtra("itemname",myitemname);
                intent.putExtra("itemprice",myitemprice);
                intent.putExtra("iteminstock", myiteminstock);
                activity.startActivityForResult(intent,1);
            }
        });
    }
    @Override
    public int getItemCount() {
        return arid.size();
    }
    public static class MyViewHolder extends RecyclerView.ViewHolder {
        TextView tvmyitemname, tvmyitemprice, tvmyiteminstock;
        ImageView ivmyitem;
        ImageButton bteditmyitem;
        ConstraintLayout mainlayoutmyitem;
        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
         ivmyitem = itemView.findViewById(R.id.ivmyitem);
         tvmyitemname = itemView.findViewById(R.id.tvmyitemname);
         tvmyitemprice = itemView.findViewById(R.id.tvmyitemprice);
         tvmyiteminstock = itemView.findViewById(R.id.tvmyiteminstock);
         bteditmyitem = itemView.findViewById(R.id.bteditmyitem);
        }
    }
}
public类RvadapterMyItems扩展了RecyclerView.Adapter{
私人语境;
活动;
MyDatabaseHelper myDB;
间质体间质体;
字符串myitemid、myitemname、myitemprice、myiteminstock、currencystring;
SharedReferences share2;
私有静态最终整数编辑\我的\项=111;
字节[]字节;
私营ArrayList Drand、ArmyTempic、armyitemname、ArmyTemprice、armyiteminstock;
内部位置;
RvadapterMyItems(活动活动、上下文上下文、ArrayList和ArrayList ArmyItem、ArrayList armyitemname、ArrayList ArmyItem、ArrayList ArmyItemStock){
这个。活动=活动;
this.context=上下文;
这个。干旱=干旱;
this.armyitempic=armyitempic;
this.armyitemname=armyitemname;
this.armyitemprice=armyitemprice;
this.armyiteminstock=armyiteminstock;
}
@非空
@凌驾
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup父级,int-viewType){
LayoutFlater充气机=LayoutFlater.from(上下文);
视图=充气机。充气(R.layout.cardlayoutmyitems,父项,false);
返回新的MyViewHolder(视图);
}
@SuppressLint(“SetTextI18n”)
@凌驾
public void onBindViewHolder(@NonNull MyViewHolder,int位置){
share2=context.getSharedReferences(“shopinfo”,MODE\u PRIVATE);
如果(共享2.包含(“货币”)){
currencystring=share2.getString(“货币”,即“”);
断言currencystring!=null;
if(currencystring.equals(“No”)){
currencystring=“”;
}
}否则{
currencystring=“”;
}
myitemid=String.valueOf(andry.get(position));
myitemname=String.valueOf(armyitemname.get(position));
myitemprice=String.valueOf(armyitemprice.get(position)+“”+currencystring);
myiteminstock=String.valueOf(“Instock:+String.valueOf(armyiteminstock.get(position))+“pcs”);
位图Bitmap=DbBitmapUtility.getImage((字节[])armyitempic.get(位置));
holder.ivmyitem.setImageBitmap(位图);
holder.tvmyitemname.setText(myitemid+“/”+myitemname);
holder.tvmyitemprice.setText(myitemprice);
holder.tvmyiteminstock.setText(myiteminstock);
bytes=DbBitmapUtility.getBytes(位图);
holder.bteditmyitem.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
意向意向=新意向(活动,AddMyItem.class);
intent.putExtra(“itemid”,myitemid);
intent.putExtra(“itempic”,字节);
intent.putExtra(“项目名称”,myitemname);
意向。putExtra(“项目价格”,myitemprice);
intent.putExtra(“iteminstock”,myiteminstock);
活动。startActivityForResult(意图,1);
}
});
}
@凌驾
public int getItemCount(){
返回0.size();
}
公共静态类MyViewHolder扩展了RecyclerView.ViewHolder{
text查看tvmyitemname、tvmyitemprice、tvmyiteminstock;
ImageView-ivmyitem;
ImageButtonBTeditMyItem;
ConstraintLayout mainlayoutmyitem;
公共MyViewHolder(@NonNull View itemView){
超级(项目视图);
ivmyitem=itemView.findviewbyd(R.id.ivmyitem);
tvmyitemname=itemView.findViewById(R.id.tvmyitemname);
tvmyitemprice=itemView.findViewById(R.id.tvmyitemprice);
tvmyiteminstock=itemView.findviewbyd(R.id.tvmyiteminstock);
bteditmyitem=itemView.findViewById(R.id.bteditmyitem);
}
}
}

我找不到我的代码发生了什么,请帮助……

我通过将按钮的onclicklistener更改为

 holder.bteditmyitem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
              Intent intent = new Intent(activity, AddMyItem.class);
                intent.putExtra("itemid",myitemid);
                intent.putExtra("itempic",bytes);
                intent.putExtra("itemname",myitemname);
                intent.putExtra("itemprice",myitemprice);
                intent.putExtra("iteminstock", myiteminstock);
                activity.startActivityForResult(intent,1);
            }
        });


我之前的理解是错误的。

我建议使用Model类,它会更干净、更容易理解。但这里的问题是,您必须持有对位置的引用,为什么要创建另一个位置变量?删除它。@EyosiyasBerketab我使用了模型类。我之前也做过类似的事情。但这次我找不到我的密码有什么问题。位置变量是从SQLite数据库自动增量值中获取的。
 holder.bteditmyitem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
             Intent intent = new Intent(activity, AddMyItem.class);
                intent.putExtra("itemid",String.valueOf(arid.get(position)));
                intent.putExtra("itempic",(byte[]) armyitempic.get(position));
                intent.putExtra("itemname",String.valueOf(armyitemname.get(position)));
                intent.putExtra("itemprice",String.valueOf(armyitemprice.get(position)));
               // intent.putExtra("iteminstock", myiteminstock);
                activity.startActivityForResult(intent,1);
            }
        });