package com.quemb.qmbform.adapter; import com.quemb.qmbform.descriptor.FormDescriptor; import com.quemb.qmbform.descriptor.FormItemDescriptor; import com.quemb.qmbform.descriptor.RowDescriptor; import com.quemb.qmbform.descriptor.SectionDescriptor; import com.quemb.qmbform.CellViewFactory; import com.quemb.qmbform.view.Cell; import android.content.Context; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import java.util.ArrayList; /** * Created by tonimoeckel on 14.07.14. */ public class FormAdapter extends BaseAdapter { private FormDescriptor mFormDescriptor; private ArrayList<FormItemDescriptor> mItems; private Context mContext; private Boolean mEnableSectionSeperator; public static FormAdapter newInstance(FormDescriptor formDescriptor, Context context){ FormAdapter formAdapter = new FormAdapter(); formAdapter.mFormDescriptor = formDescriptor; formAdapter.mContext = context; formAdapter.setEnableSectionSeperator(true); return formAdapter; } @Override public int getCount() { mItems = new ArrayList<FormItemDescriptor>(); int sectionCount = 1; for (SectionDescriptor sectionDescriptor : mFormDescriptor.getSections()){ if (sectionDescriptor.hasTitle()){ mItems.add(sectionDescriptor); } mItems.addAll(sectionDescriptor.getRows()); if (getEnableSectionSeperator() && sectionCount < mFormDescriptor.getSections().size()) { FormItemDescriptor itemDescriptor = mItems.get(mItems.size() - 1); if (itemDescriptor instanceof RowDescriptor) ((RowDescriptor) itemDescriptor).setLastRowInSection(true); mItems.add(RowDescriptor.newInstance(null, RowDescriptor.FormRowDescriptorTypeSectionSeperator)); } sectionCount++; } return mItems.size(); } @Override public FormItemDescriptor getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { return CellViewFactory.getInstance().createViewForFormItemDescriptor(mContext,getItem(position)); } public Boolean getEnableSectionSeperator() { return mEnableSectionSeperator; } public void setEnableSectionSeperator(Boolean enableSectionSeperator) { mEnableSectionSeperator = enableSectionSeperator; } }