java - Recyclerview 仅显示父对象的最后一项
问题描述
我正在 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);
}
}}
解决方案
First of all your code is very messy second i think problem is in this line
holder.t2.setText( model.getChallengeName()+ " :" + challengeItems.get(position).getMatchID());
Replace model.getChallengeName()
with below line
datalist.get(position).getModel().getChallengeName();
This is because you're initialising model in constructor in a loop and model holds the value of last item on datalist. In onBindViewHolder
access values directly from datalist using format as i mentioned.
推荐阅读
- macos - WebKitWebProcess 制作新的停靠图标
- python - 如何在 Python 中进行并行处理?
- node.js - 无法在 Nodejs 中连接本地 PostgreSQL 数据库
- java - 如何在 RecyclerView 中显示同一联系人的多个电话号码?
- apache-kafka - 使用 kafka 流尝试将消息从输入主题写入输出主题
- r - 我的 R 函数旨在将参与者随机分配到组并模拟手段差异,但并未通过管道运行
- ios - 有没有办法在不取回 Firestore 中的文档的情况下侦听集合中的更改
- javascript - 在自定义挂钩中将类型分配给事件处理程序
- node.js - Windows 中的路径系统
- ruby-on-rails - 汇总用户 Ruby on Rails 6 选定月份、年份的每周记录