从数据库填充ExpandableListView - 无法正常工作

Rub*_*r19 5 java sqlite android expandablelistview

我有表收据和日志和表收据has_many日志.因此,在我的LogsRecapitulation.class上,我按分类和等级对这些日志进行分组(这两列来自表日志).

我试图通过ExpandableListView来做到这一点.每组日志父元素将包含数据库中每个组的排序和等级.

子元素将具有textViews,用于记录子元素,质量,价格和一些计算价格的日志.它应该看起来像这样:

在此输入图像描述

我创建了expandableListView布局和适配器.但是现在我在填充数据库中的父元素和子元素时遇到了麻烦.

这是我的代码,所以你可以看到我到目前为止所做的工作.

这是expandableListAadapter类:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的logsRecapitulation类:

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);
        //recieve RecepitID and query to group_by logs
        final long forwardedId = (long) getIntent().getExtras().get(String.valueOf("recepitID"));
        List<Logs> logsList = new Select().from(Logs.class).where("Receipt = " + forwardedId).groupBy("SortID, Grade").execute();
        //get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);
        prepareListData();
        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);
        expListView.setAdapter(listAdapter);
    }

    private void prepareListData() {

    }
}
Run Code Online (Sandbox Code Playgroud)

我现在的问题是使用数据库中的数据填充ExpendableListView.这是我的表类:

//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;
}
Run Code Online (Sandbox Code Playgroud)

注意:我正在使用ActiveAndroid.

如果有人知道如何从数据库填充可扩展listView请帮忙.

问题:如何从数据库成功填充ExpandableListView?