gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 01:09:41 25 4
gpt4 key购买 nike

我正在 Android 改造中从 JSON 制作回收器 View 。一切正常。我的 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"
}
]
}
]

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

但它仅显示每个 challengeItem 的最后一个 ChallengeName。我的代码有什么问题。请帮我。我已经浪费了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();

这是因为您在循环的构造函数中初始化模型,并且 model 保存 datalist 上最后一项的值。在 onBindViewHolder 中,使用我提到的格式直接从数据列表访问值。

关于java - Recyclerview 仅显示父对象的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57697754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com