[英]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
。
但只显示最后ChallengeName
每challengeItem
。 我的代码有什么问题。 请帮我。 我已经浪费了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.