package com.radicaldynamic.groupinform.adapters; import java.util.ArrayList; import java.util.Iterator; import android.content.Context; import android.graphics.drawable.Drawable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import com.radicaldynamic.groupinform.R; import com.radicaldynamic.groupinform.xform.Instance; public class FormBuilderInstanceListAdapter extends ArrayAdapter<Instance> { private ArrayList<Instance> mInstances; private Context mContext; public FormBuilderInstanceListAdapter(Context context, ArrayList<Instance> instanceList) { super(context, R.layout.fb_field_row, instanceList); mInstances = instanceList; mContext = context; } public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; Instance instance = mInstances.get(position); ArrayList<String> details = new ArrayList<String>(); if (row == null) { LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); row = inflater.inflate(R.layout.fb_field_row, parent, false); } // If these objects are not reset to suitable defaults they might be reused with undesired side effects TextView labelView = (TextView) row.findViewById(R.id.label); TextView detailView = (TextView) row.findViewById(R.id.details); ImageView fieldTypeView = (ImageView) row.findViewById(R.id.field_type); labelView.setText(instance.getName()); if (instance.getChildren().isEmpty()) { fieldTypeView.setImageDrawable(getDrawable(R.drawable.element_noicon)); if (instance.getField() == null) if (instance.getBind().getAttributes().containsKey("jr:preload")) details.add("Hidden data (auto populated)"); else details.add("Hidden data"); else details.add("Data from \"" + instance.getField().getLabel() + "\""); } else { fieldTypeView.setImageDrawable(getDrawable(R.drawable.element_group)); details.add("Select to view repeated fields"); } // Build details line Iterator<String> it = details.iterator(); // Suitable default String detailText = ""; while (it.hasNext()) { String d = it.next(); if (detailText.length() > 0) detailText = detailText + ", " + d; else detailText = d; } detailView.setText(detailText); return (row); } private Drawable getDrawable(int image) { return mContext.getResources().getDrawable(image); } }