I have a list view populated with custom array adapter. I want to add section header to list view items by date which is a value in the object. My Adapter class is
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 code
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();
}
Setting adapter
private void setAdapter() {
adapter = new ReceiptAdapter2(context,planList);
category_list.setAdapter(adapter);
}
model class
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; }
}
I referred many tutorials but nothing works for me.How can i pass multiple arraylist as in my case to adapter class? your responses are appreciated
You need to add your both models ReceiptModel() and SelectionItem() as an object of an ArrayList like this
private ArrayList<Object> lpAndAlp=new ArrayList<>();
lpAndAlp.add("model");
lpAndAlp.add("model_section");
and then lpAndAlp
in your adapter
private void setAdapter() {
adapter = new ReceiptAdapter2(context,planList);
category_list.setAdapter(adapter);
}
and call it your adapter class like this..
private ArrayList<Object> planList;
public ReceiptAdapter2(Context applicationContext, ArrayList<Object> planList) {
this.context = applicationContext;
this.planList = planList;
inflater = (LayoutInflater.from(applicationContext));
}
you just check return type of getItemViewType
method in 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;
}