我有一个自定义阵列适配器填充的列表视图。我想将节标题添加到按日期列出视图项的日期,这是对象中的一个值。
我的适配器类是
public class ReceiptAdapter2 extends BaseAdapter {
Context context;
LayoutInflater inflater;
private ArrayList<ReceiptModel> planList;
public ReceiptAdapter2(Context applicationContext, ArrayList<ReceiptModel> planList) {
this.context = applicationContext;
this.planList = planList;
inflater = (LayoutInflater.from(applicationContext));
}
@Override
public int getViewTypeCount() {
return 2;
}
@Override
public int getItemViewType(int position) {
if (getItem(position) instanceof SectionItem){
return 0;
}else{
return 1;
}
}
@Override
public int getCount() {
return planList.size();
}
@Override
public Object getItem(int i) {
return planList.get(i);
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ReceiptModel model = planList.get(i);
view = inflater.inflate(R.layout.snipadapt, null);
TextView names = (TextView) view.findViewById(R.id.textView);
names.setText(model.getName());
return view;
}
}
MainActivity代码
if (hstry.length() > 0 && hstry != null) {
for (int i = 0; i < hstry.length(); i++) {
try {
history_data = hstry.getJSONObject(i);
model = new ReceiptModel();
model_section = new SectionItem();
model.setRid(history_data.optString("ID"));
model.setName(history_data.optString("Name"));
model.setMobile(history_data.optString("Mobile"));
model.setTax(history_data.optString("Tax"));
model.setQnt(history_data.optString("T_quantity"));
model.setPrice(history_data.optString("T_price"));
model.setSub(history_data.optString("Sub_total"));
model.setDiscount(history_data.optString("Discount"));
model.setType(history_data.optString("Payment_type"));
model.setDate(db.getCatColor(history_data.optString("Date")));
model_section.setDevice(db.getCatColor(history_data.optString("Date")));
} catch (JSONException e) {
e.printStackTrace();
}
}
setAdapter();
}
设置适配器
private void setAdapter() {
adapter = new ReceiptAdapter2(context,planList);
category_list.setAdapter(adapter);
}
模型类
public class ReceiptModel {
private String id,name,mobile,tax,t_quantity,t_price,s_total,discount,date,type;
private String device;
private String os,location;
private String network,weather,storage,time,internal,cat_id;
public String getRid() {
return id;
}
public void setRid(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMobile() {return mobile; }
public void setMobile(String mobile) {this.mobile = mobile; }
public String getTax() {return tax; }
public void setTax(String tax) {this.tax = tax; }
public String getQnt() {return t_quantity; }
public void setQnt(String t_quantity) {this.t_quantity = t_quantity; }
public String getPrice() {return t_price; }
public void setPrice(String t_price) {this.t_price = t_price; }
public String getSub() {return s_total; }
public void setSub(String s_total) {this.s_total = s_total; }
public String getDiscount() {return discount; }
public void setDiscount(String discount) {this.discount = discount; }
public String getDate() {return date; }
public void setDate(String date) {this.date = date; }
}
我参考了许多教程,但对我没有用。如何将多个arraylist传递给适配器类?感谢您的回应
最佳答案
您需要将两个模型ReceiptModel()和SelectionItem()添加为ArrayList的对象,如下所示
private ArrayList<Object> lpAndAlp=new ArrayList<>();
lpAndAlp.add("model");
lpAndAlp.add("model_section");
然后在适配器中
lpAndAlp
private void setAdapter() {
adapter = new ReceiptAdapter2(context,planList);
category_list.setAdapter(adapter);
}
然后将其称为您的适配器类。
private ArrayList<Object> planList;
public ReceiptAdapter2(Context applicationContext, ArrayList<Object> planList) {
this.context = applicationContext;
this.planList = planList;
inflater = (LayoutInflater.from(applicationContext));
}
您只需检查
getItemViewType
中getView
方法的返回类型 @Override
public View getView ( int i, View view, ViewGroup viewGroup){
int type = getItemViewType(position);
if (view == null) {
switch (type) {
case 0:
view = inflater.inflate(R.layout.snipadapt, parent, false);
break;
case 1:
view = inflater.inflate(R.layout.yourHeaderLayout, parent, false);
break;
}
}
switch (type) {
case 0:
ReceiptModel model = planList.get(i);
view = inflater.inflate(R.layout.snipadapt, null);
TextView names = (TextView) view.findViewById(R.id.textView);
names.setText(model.getName());
break;
case 1:
SectionItem model_section = planList.get(i);
//your header
break;
}
return view;
}