ListView自定义适配器TextView在try-catch块内初始化,但未显示



试图从SQLite获取数据并初始化一些文本视图数据,但问题是文本视图没有显示在try-catch块内初始化的数据。有没有更好的解决方案来解决这个问题?

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
AdmissionViewHolder viewHolder;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.followup_listview_row_layout, parent, false);
viewHolder = new AdmissionViewHolder();
viewHolder.p_type = (TextView) row.findViewById(R.id.p_type);
viewHolder.pName_Age = (TextView) row.findViewById(R.id.p_name_age);
viewHolder.admissionDateTime = (TextView) row.findViewById(R.id.admission_date_time);
viewHolder.facilityName = (TextView) row.findViewById(R.id.facility_name);
viewHolder.sex = (TextView) row.findViewById(R.id.sex);
viewHolder.followup_Item = (TextView) row.findViewById(R.id.followup);
viewHolder.followupItem = (Button) row.findViewById(R.id.followup_item);
viewHolder.itemInfo = (ImageView) row.findViewById(R.id.item_info);
viewHolder.arrow = (ImageButton) row.findViewById(R.id.arrow_button);
viewHolder.hiddenView = (TableLayout) row.findViewById(R.id.hiddenView);
viewHolder.ps_m = (TextView) row.findViewById(R.id.txt_s_pm);
viewHolder.ps_e = (TextView) row.findViewById(R.id.txt_s_pe);
viewHolder.ps_n = (TextView) row.findViewById(R.id.txt_s_pn);
viewHolder.ts_m = (TextView) row.findViewById(R.id.txt_s_tm);
viewHolder.ts_e = (TextView) row.findViewById(R.id.txt_s_te);
viewHolder.ts_n = (TextView) row.findViewById(R.id.txt_s_tn);
row.setTag(viewHolder);
} else {
viewHolder = (AdmissionViewHolder)row.getTag();
}
AdmissionModel admissionModel = getItem(position);
String pAge = String.format("%dy %dm %dd",admissionModel.AgeYears,admissionModel.AgeMonths,admissionModel.AgeDays);
viewHolder.p_type.setText(admissionModel.PtType);
viewHolder.pName_Age.setText(String.format("%s (%s)",admissionModel.PtName,pAge));
viewHolder.admissionDateTime.setText(String.format("%s %s",admissionModel.HosAdmDate,admissionModel.HosAdmTime));
viewHolder.facilityName.setText(admissionModel.FacilityName);
viewHolder.sex.setText(admissionModel.SexName);
viewHolder.itemInfo.setOnClickListener(this);
viewHolder.itemInfo.setTag(position);
viewHolder.followupItem.setOnClickListener(this);
viewHolder.followupItem.setTag(position);
viewHolder.followup_Item.setOnClickListener(this);
viewHolder.followup_Item.setTag(position);
viewHolder.arrow.setOnClickListener(v -> clickedListener.buttonClicked(admissionModel));
viewHolder.arrow.setTag(position);
try {
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
String toDay = formatter.format(date);
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -1);
String previousDay = formatter.format(cal.getTime());
List<FollowupModel> followupModelList = dbHelper.GetFollowupData(admissionModel.NtfSL,previousDay,toDay);
if(followupModelList.size()>0){
Map<String, List<FollowupModel>> groupByDateList = Stream.of(followupModelList).collect(
Collectors.groupingBy(e->e.FollowupDateyyyMMdd));
for (String dataKey : groupByDateList.keySet()){
if(dataKey.equals(previousDay)){
for (FollowupModel followupModel : groupByDateList.get(dataKey)){
if(followupModel.Type == 1){
viewHolder.ps_m = setPatientStatus(followupModel.PtStatus);
}else if(followupModel.Type == 2){
viewHolder.ps_e = setPatientStatus(followupModel.PtStatus);
}else if(followupModel.Type == 3){
viewHolder.ps_n = setPatientStatus(followupModel.PtStatus);
}
}
}else if(dataKey.equals(toDay)){
for (FollowupModel followupModel : groupByDateList.get(dataKey)){
if(followupModel.Type == 1){
viewHolder.ts_m  = setPatientStatus(followupModel.PtStatus);
}else if(followupModel.Type == 2){
viewHolder.ts_e = setPatientStatus(followupModel.PtStatus);
}else if(followupModel.Type == 3){
viewHolder.ts_n = setPatientStatus(followupModel.PtStatus);
}
}
}
}
}
} catch (ParseException e) {
e.printStackTrace();
}
if(admissionModel.isTableLayoutVisible){
viewHolder.hiddenView.setVisibility(View.VISIBLE);
viewHolder.arrow.setImageResource(R.drawable.ic_baseline_expand_less_24);
}else{
viewHolder.hiddenView.setVisibility(View.GONE);
viewHolder.arrow.setImageResource(R.drawable.ic_baseline_expand_more_24);
}
return row;
}

这里的getView((将在每次布局膨胀时调用。线下是重型作业。

List<FollowupModel> followupModelList = dbHelper.GetFollowupData(admissionModel.NtfSL,previousDay,toDay);

您必须将其移动到其他类,并将所需信息作为参数/列表传递到您的自定义适配器类

最新更新