我正在 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/