[英]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.