android - 向 RecyclerView 传递多个参数
问题描述
在我当前的代码中,我能够将一个值传递并显示给 RecyclerView。我不确定我错过了什么,或者我是否必须完全更改我的代码。
这是我的适配器类:
public class TechSkillsAdapter extends RecyclerView.Adapter<TrainingViewHolder> {
Context c;
ArrayList<String> trainings;
public TechSkillsAdapter(Context c, ArrayList<String> trainings) {
this.c = c;
this.trainings = trainings;
}
@Override
public TrainingViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(c).inflate(R.layout.cv_traininglist, parent, false);
return new TrainingViewHolder(v);
}
@Override
public void onBindViewHolder(TrainingViewHolder holder, int position) {
holder.date_txt.setText(trainings.get(position));
}
@Override
public int getItemCount() {
return trainings.size();
}
}
我正在使用改造检索列表,然后将值传递给将它们显示给recyclerview的方法。
这是我检索培训的方式:
private void getTraining(final String id, String tid){
com.trendmicro.projectlara.apis.ApiServiceTraining apiService = ApiClient.getClient().create(ApiServiceTraining.class);
Call<List<Training>> call = apiService.getMyTraining(id, tid);
call.enqueue(new Callback<List<Training>>() {
@Override
public void onResponse (Call<List<Training>> call, Response<List<Training>> response) {
List<Training> training = response.body();
for(Training t: training){
fillTrainings(t.getTraining_title().toString(), t.getTraining_date().toString());
}
}
这是我的 fillTrainings 方法。
我传递了两个值,但我只能显示一个值:
private void fillTrainings(String title, String date) {
training.add(title);
adapter = new TechSkillsAdapter(getContext(), training);
rv.setAdapter(adapter);
progressDialog.dismiss();
}
这是我要解决的问题,我不确定如何显示日期,因为我添加值的方式是:training.add(title);
解决方案
这是因为每次您有一个带有此代码的项目时,您都会重新创建适配器:
@Override
public void onResponse (Call<List<Training>> call, Response<List<Training>> response) {
List<Training> training = response.body();
for(Training t: training){
// here you're only send one time
fillTrainings(t.getTraining_title().toString(), t.getTraining_date().toString());
}
}
您可以通过将方法更改为以下方式将所有列表发送到您的方法来修复它:
private void fillTrainings(List<Training> trainList) {
for(Training train: trainList) {
training.add(train.getTraining_title().toString());
}
adapter = new TechSkillsAdapter(getContext(), training);
rv.setAdapter(adapter);
progressDialog.dismiss();
}
那么你可以使用它:
@Override
public void onResponse (Call<List<Training>> call, Response<List<Training>> response) {
List<Training> training = response.body();
fillTrainings(training);
}
推荐阅读
- javascript - 动态加载图像时轮播问题
- c++ - 有没有办法使用十进制 ASCII 码通过自动类型推断来获取字符?
- javascript - JavaScript。循环问题
- arrays - Angular 5 从 JSON 结果构建表单数组
- sql-server - SQL Server 2016 + 链接服务器加入 = 未返回行
- sql - 用户定义的表类型插入导致转换错误
- html - 使屏幕阅读器可以访问步骤进度指示器
- azure - 创建后端地址池时配置状态为空白
- java - 使用 iText 在 Java 中合并 PDF 时出现意外的不同页面大小
- python - 将数据框python中每一行的前h值乘以k