I have the Receipt and Logs tables and the has_many logs receipt table. So, on my LogsRecapitulation.class, I group the logs by sort and class (these two columns are from table logs).
I am trying to do this through an ExpandableListView. Each group of parent log items will consist of Sort and Grade for each group from the database.
The children elements will have textViews for counting the logs in the child, mass, price, and some estimated price. And it should look something like this:

I created expandableListView layouts and an adapter. But now I have problems populating the parent and child elements from the database.
Here is my code so you can see what I have done so far.
This is the expandableListAadapter class:
public class ExpandableListAdapter extends BaseExpandableListAdapter { private Context _context; private List<String> _listDataHeader; private HashMap<String, List<String>> _listDataChild; public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listDataChild) { this._context = context; this._listDataHeader = listDataHeader; this._listDataChild = listDataChild; } @Override public Object getChild(int groupPosition, int childPosition) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String childText = (String) getChild(groupPosition, childPosition); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.expendable_items, null); } TextView logsMass = (TextView) convertView.findViewById(R.id.exp_lis_mass); TextView logsPrice = (TextView) convertView.findViewById(R.id.exp_lis_price); TextView logsMassPrice = (TextView) convertView.findViewById(R.id.ext_lis_sum_price); logsMass.setText(childText); logsPrice.setText(childText); logsMassPrice.setText(childText); return convertView; } @Override public int getChildrenCount(int groupPosition) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)).size(); } @Override public Object getGroup(int groupPosition) { return this._listDataHeader.get(groupPosition); } @Override public int getGroupCount() { return this._listDataHeader.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { String headerTitle = (String) getGroup(groupPosition); if (convertView == null) { LayoutInflater inflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = inflater.inflate(R.layout.expandable_group, null); } TextView logsSort = (TextView) convertView.findViewById(R.id.exp_gr_sort); TextView logsGrade = (TextView) convertView.findViewById(R.id.exp_gr_grade); TextView logsCount = (TextView) convertView.findViewById(R.id.exp_gr_logs_count); logsSort.setText(headerTitle); logsGrade.setText(headerTitle); logsCount.setText(headerTitle); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } }
And this is my logsRecapitulation class:
public class LogsRecapitulation extends AppCompatActivity { ExpandableListAdapter listAdapter; ExpandableListView expListView; List<String> listDataHeader; HashMap<String, List<String>> listDataChild; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.expandable_layout);
Now my problem is populating the ExpendableListView with data from the database. Here are my table tables:
//receipt table @Table(name = "Receipt") public class Receipt extends Model { @Column(name="Place") String place; @Column(name="ShippingNumber") String shippingNumber; @Column(name="Warehouse") String warehouse; @Column(name="Carrier") String carrier; @Column(name="LicencePlate") String licencePlate; @Column(name = "Driver") String driver; @Column(name = "Customer") String customer; @Column(name= "DestWarehouse") String destWarehouse; @Column(name = "Employee") String employee; @Column(name = "PriceType") String priceType; @Column(name = "PriceCorrection") Double priceCorrection; @Column(name = "PriceCorrection2") Double priceCorrection2; @Column(name = "Supplier") String supplier; @Column(name = "CreatedAt") Date createdAt; } //logs table @Table(name = "Logs") public class Logs extends Model { @Column(name="PlateNumber") String plate_number; @Column(name="SortID") String sort_id; @Column(name="Grade") String grade; @Column(name = "Diametar") double diameter; @Column(name="Length") double length; @Column(name="CreatedAt") Date createdAt; @Column(name="Receipt") Receipt receipt; @Column(name = "Price") Price price; } //price table @Table(name = "Price") public class Price extends Model { @Column(name = "Sort") String sort; @Column(name = "Grade") String grade; @Column(name = "Diameter") double diameter; @Column(name = "LengthDG") double lengthDG; @Column(name = "LengthGG") double lengthGG; @Column(name = "StumpPriceKn") double stumpPrice_kn; @Column(name = "RoadPriceKn") double roadPrice_kn; }
Note. I am using ActiveAndroid.
Please, if anyone knows how to populate an extensible listView from a database, please help.
Question: What do I need to do to successfully populate an ExpandableListView from a database?