android - 如何查看 RecycleView 中的数据?
问题描述
我使用 retrofit2 从三个表中导入数据。
将值放在一个列表中并在 RecycleView 中显示它们。
但它显示了第二次运行的第一个结果。
第二个结果显示第三次运行。
第一次运行没什么。
在第一次运行中,Adapter 的 list.size() 也给出了零。
我不知道为什么。
这是主要活动。
public class HistoryActivity extends AppCompatActivity implements View.OnClickListener {
private TextView foodTextView, companyTextView, dateTextView, useMaterialTextView;
private ImageView dateChangeImgView;
Calendar calendar;
RecyclerView historyRecyclerView;
ApiInterface apiInterface;
RecyclerView.LayoutManager layoutManager;
List<CowInfoData> cowInfoDataList;
List<RiceInfoData> riceInfoDataList;
List<VegetableInfoData> vegetableInfoDataList;
List list = new ArrayList();
HistoryAdapter historyAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_history);
HistoryActivityInit();
Intent intent = getIntent();
String foodName = intent.getExtras().getString("food_name");
String companyName = intent.getExtras().getString("company_name");
foodTextView.setText(foodName);
companyTextView.setText(companyName);
}
private void HistoryActivityInit() {
foodTextView = findViewById(R.id.text_food_name);
companyTextView = findViewById(R.id.text_company_name);
dateChangeImgView = findViewById(R.id.imgview_date_change);
dateTextView = findViewById(R.id.text_date);
useMaterialTextView = findViewById(R.id.text_use_material);
historyRecyclerView = findViewById(R.id.recyclerview_history);
calendar = new GregorianCalendar();
// dateTextView.setText(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
layoutManager = new LinearLayoutManager(this);
historyRecyclerView.setLayoutManager(layoutManager);
historyRecyclerView.setHasFixedSize(true);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.imgview_date_change:
chooseDate();
break;
}
}
private void chooseDate() {
final View dialogView = View.inflate(this, R.layout.dialog_date_picker, null);
final DatePicker datePicker = dialogView.findViewById(R.id.date_picker);
datePicker.updateDate(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogView);
builder.setNegativeButton("Cancel", null);
builder.setPositiveButton("Ok", (dialog, which) -> {
calendar = new GregorianCalendar(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
dateTextView.setText(new SimpleDateFormat("yyyy-MM-dd").format(calendar.getTime()));
String f_name = foodTextView.getText().toString();
String c_name = companyTextView.getText().toString();
String d_date = dateTextView.getText().toString();
Log.e("HistoryActivity", f_name);
Log.e("HistoryActivity", c_name);
Log.e("HistoryActivity", d_date);
historyInquiry(f_name, c_name, d_date);
});
builder.show();
}
private void historyInquiry(String food_name, String company_name, String date) {
apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
Call<List<CowInfoData>> call = apiInterface.getHistory_cow(food_name, company_name, date);
call.enqueue(new Callback<List<CowInfoData>>() {
@Override
public void onResponse(Call<List<CowInfoData>> call, Response<List<CowInfoData>> response) {
cowInfoDataList = response.body();
list.addAll(cowInfoDataList);
}
@Override
public void onFailure(Call<List<CowInfoData>> call, Throwable t) {
Log.e("ErrorMessage", t.toString());
}
});
Call<List<RiceInfoData>> call2 = apiInterface.getHistory_rice(food_name, company_name, date);
call2.enqueue(new Callback<List<RiceInfoData>>() {
@Override
public void onResponse(Call<List<RiceInfoData>> call, Response<List<RiceInfoData>> response) {
riceInfoDataList = response.body();
list.addAll(riceInfoDataList);
}
@Override
public void onFailure(Call<List<RiceInfoData>> call, Throwable t) {
Log.e("ErrorMessage", t.toString());
}
});
Call<List<VegetableInfoData>> call3 = apiInterface.getHistory_vegetable(food_name, company_name, date);
call3.enqueue(new Callback<List<VegetableInfoData>>() {
@Override
public void onResponse(Call<List<VegetableInfoData>> call, Response<List<VegetableInfoData>> response) {
vegetableInfoDataList = response.body();
list.addAll(vegetableInfoDataList);
}
@Override
public void onFailure(Call<List<VegetableInfoData>> call, Throwable t) {
Log.e("ErrorMessage", t.toString());
}
});
historyAdapter = new HistoryAdapter(list, HistoryActivity.this);
historyRecyclerView.setAdapter(historyAdapter);
historyAdapter.notifyDataSetChanged();
}
}
是适配器。
public class HistoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List list;
private Context context;
public HistoryAdapter(List list, Context context) {
this.list = list;
this.context = context;
}
@Override
public int getItemViewType(int position) {
if(list.get(position) instanceof CowInfoData) {
return 0;
} else if(list.get(position) instanceof RiceInfoData) {
return 1;
}
return 2;
}
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == 0) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_history_cow, parent, false);
CowHistoryViewHolder holder = new CowHistoryViewHolder(view);
return holder;
} else if(viewType == 1) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_history_rice, parent, false);
RiceHistoryViewHolder holder = new RiceHistoryViewHolder(view);
return holder;
} else {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_history_vegetable, parent, false);
VegetableHistoryViewHolder holder = new VegetableHistoryViewHolder(view);
return holder;
}
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
if(this.getItemViewType(position) == 0) {
CowInfoData cowInfoData = (CowInfoData)list.get(position);
CowHistoryViewHolder holder = (CowHistoryViewHolder) viewHolder;
holder.cowCategoryTextView.setText(cowInfoData.getCow_category());
holder.cowCompanyTextView.setText(cowInfoData.getCow_packing_company());
holder.cowTrackingNumTextView.setText(cowInfoData.getCow_tracking_num());
holder.cowGradeTextView.setText(cowInfoData.getCow_grade());
Log.e("HistoryAdapter", cowInfoData.getCow_tracking_num());
} else if(this.getItemViewType(position) == 1) {
RiceInfoData riceInfoData = (RiceInfoData)list.get(position);
RiceHistoryViewHolder holder = (RiceHistoryViewHolder) viewHolder;
holder.riceNameTextView.setText(riceInfoData.getRice_name());
holder.riceCompanyTextView.setText(riceInfoData.getRice_company());
holder.riceProduceTextView.setText(riceInfoData.getProduce_date());
Log.e("HistoryAdapter", riceInfoData.getRice_name());
} else if(this.getItemViewType(position) == 2) {
VegetableInfoData vegetableInfoData = (VegetableInfoData)list.get(position);
VegetableHistoryViewHolder holder = (VegetableHistoryViewHolder) viewHolder;
holder.vegetableNameTextView.setText(vegetableInfoData.getVegetable_name());
holder.vegetableCompanyTextView.setText(vegetableInfoData.getVegetable_company());
Log.e("HistoryAdapter", vegetableInfoData.getVegetable_name());
} else {
Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
}
}
@Override
public int getItemCount() {
Log.e("HistoryAdapter", String.valueOf(list.size()));
return list.size();
}
public static class CowHistoryViewHolder extends RecyclerView.ViewHolder {
TextView cowCategoryTextView, cowCompanyTextView, cowTrackingNumTextView, cowGradeTextView;
public CowHistoryViewHolder(@NonNull View itemView) {
super(itemView);
cowCategoryTextView = itemView.findViewById(R.id.text_cow_category);
cowCompanyTextView = itemView.findViewById(R.id.text_cow_company);
cowTrackingNumTextView = itemView.findViewById(R.id.text_cow_tracking_num);
cowGradeTextView = itemView.findViewById(R.id.text_cow_grade);
}
}
public static class RiceHistoryViewHolder extends RecyclerView.ViewHolder {
TextView riceNameTextView, riceCompanyTextView, riceProduceTextView;
public RiceHistoryViewHolder(@NonNull View itemView) {
super(itemView);
riceNameTextView = itemView.findViewById(R.id.text_rice_name);
riceCompanyTextView = itemView.findViewById(R.id.text_rice_company);
riceProduceTextView = itemView.findViewById(R.id.text_rice_produce);
}
}
public static class VegetableHistoryViewHolder extends RecyclerView.ViewHolder {
TextView vegetableNameTextView, vegetableCompanyTextView;
public VegetableHistoryViewHolder(@NonNull View itemView) {
super(itemView);
vegetableNameTextView = itemView.findViewById(R.id.text_vegetable_name);
vegetableCompanyTextView = itemView.findViewById(R.id.text_vegetable_company);
}
}
}
请帮助我。
解决方案
notifyDataSetChanged();
更新数据后您没有调用
只需在;historyAdapter.notifyDataSetChanged();
之后 添加list.addAll(cowInfoDataList)
还
historyAdapter = new HistoryAdapter(list, HistoryActivity.this);
historyRecyclerView.setAdapter(historyAdapter);
这两行应该在调用 API 之前执行。可能在 oncreate() 内部
推荐阅读
- c# - 从数据库中检索下拉值并将检索到的值显示为与其他下拉列表项一起选择的值
- html - right align li in flex ul
- java - Kotlin 协程 vs CompletableFuture
- c++ - can't find a way to make garanteed return value optimization work
- javafx - How to make scene local JavaFX
- powershell - Move Files Containing X in their Names to Folder X
- java - Java:导出 Microsoft Access 数据库中 OLE 列中包含的与设备无关的位图流
- admob - 如果我只使用 admob,我需要对数据收集和分析工具进行哪些声明?
- browser-sync - 无法使用浏览器同步启动 chrome
- typescript - 过滤掉映射类型的索引