簡體   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