繁体   English   中英

Recyclerview仅显示父对象的最后一项

[英]Recyclerview showing only last item of parent object

我正在从android改造中的JSON回收视图。 一切正常。 我的JSON看起来像这样。

这是我的JSON结构:

[
   {
      "ChallengeID":"1",
      "ChallengeName":"New Challenge Arrived",
      "ChallengeIcon":"icon.jpg",
      "BetID":"3",
      "challengeItem":[
         {
            "CallengeItemID":"5",
            "ChallengeID":"1",
            "MatchID":"845"
         },
         {
            "CallengeItemID":"6",
            "ChallengeID":"1",
            "MatchID":"844"
         },
         {
            "CallengeItemID":"7",
            "ChallengeID":"1",
            "MatchID":"843"
         },
         {
            "CallengeItemID":"8",
            "ChallengeID":"1",
            "MatchID":"842"
         },
         {
            "CallengeItemID":"9",
            "ChallengeID":"1",
            "MatchID":"841"
         }
      ]
   },
   {
      "ChallengeID":"2",
      "ChallengeName":"Tuesday Funday",
      "ChallengeIcon":"icon.jpg",
      "BetID":"3",
      "challengeItem":[
         {
            "CallengeItemID":"2",
            "ChallengeID":"2",
            "MatchID":"853"
         },
         {
            "CallengeItemID":"3",
            "ChallengeID":"2",
            "MatchID":"852"
         },
         {
            "CallengeItemID":"4",
            "ChallengeID":"2",
            "MatchID":"849"
         }
      ]
   },
   {
      "ChallengeID":"3",
      "ChallengeName":"Tuesday Funday",
      "ChallengeIcon":"icon.jpg",
      "BetID":"3",
      "challengeItem":[
         {
            "CallengeItemID":"2",
            "ChallengeID":"2",
            "MatchID":"853"
         },
         {
            "CallengeItemID":"3",
            "ChallengeID":"2",
            "MatchID":"852"
         }
      ]
   }
]

现在,我想显示的是每个ChallengeName左侧的challengeItem

但只显示最后ChallengeNamechallengeItem 我的代码有什么问题。 请帮我。 我已经浪费了15个小时来解决这个问题。 这是我的recyclerview适配器代码

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.MyViewholder> {

    ArrayList<ModelClass> datalist;
    ModelClass model;
    ArrayList<ChallengeItem> challengeItems;
    Context context;

    public RecyclerAdapter(FragmentActivity activity, ArrayList<ModelClass> items, ArrayList<ModelClass> datalist) {
        this.datalist = datalist;
        this.context=activity;
        this.challengeItems=new ArrayList<>();
        model=new ModelClass();

        for(ModelClass mc: datalist)
        {
            model = mc;
            System.out.println("model: " + model.getChallengeName());

        }

        for(ModelClass g : datalist) {
            //invoke any methods of each gun
            ArrayList<ChallengeItem> bullets = g.getChallengeItem();
            challengeItems.addAll(bullets);


            for(ChallengeItem b : bullets) {
                System.out.println("X: "+b.getMatchID());

            }
        }
    }

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



    @Override
    public void onBindViewHolder(@NonNull MyViewholder holder, int position) {

        holder.t2.setText( model.getChallengeName()+ " :" + challengeItems.get(position).getMatchID());
        holder.t3.setText(challengeItems.get(position).getCallengeItemID());


        holder.t2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                System.out.println("challenge name is :"+model.getChallengeName());
            }
        });

    }

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

    public class MyViewholder extends RecyclerView.ViewHolder {
        TextView t1,t2,t3;
        public MyViewholder(@NonNull View itemView) {
            super(itemView);
            t1=itemView.findViewById(R.id.chitemid);
            t2=itemView.findViewById(R.id.chalid);
            t3=itemView.findViewById(R.id.matchid);
        }
    }}

首先,您的代码非常混乱,第二,我认为问题出在这行

holder.t2.setText( model.getChallengeName()+ " :" + challengeItems.get(position).getMatchID());

用下面的行替换model.getChallengeName()

datalist.get(position).getModel().getChallengeName();

这是因为您正在循环中在构造函数中初始化模型,并且模型datalist上的最后一项的值保留。 onBindViewHolder ,使用如上所述的格式直接从数据onBindViewHolder访问值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM