Depurando ExpandableListView de la base de datos – no funciona

Tengo tablas Recibo y registros y recibo de la tabla has_many logs. Así que en mi LogsRecapitulation.class tengo los registros de agrupación por orden y grado (esas dos columnas son de los registros de tabla).

Tengo que tratar de hacer esto a través de ExpandableListView. Cada grupo de registros de los elementos principales consistirá en Ordenar y Grado para cada grupo de la base de datos.

Los elementos de los niños tendrán textViews para los registros cuentan en el elemento del niño, la masa, el precio y un cierto precio calculado. Y debería verse algo así:

Introduzca aquí la descripción de la imagen

He creado diseños y adaptador expansibleListView. Pero ahora tengo problemas con poblar elementos padre y hijo de la base de datos.

Aquí está mi código para que pueda ver lo que he hecho hasta ahora.

Esto es 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; } } 

Y esta es mi clase 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() { } } 

Mi problema ahora es poblar ExpendableListView con datos de la base de datos. Aquí están mis clases de mesa:

 //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; } 

Nota: Estoy usando ActiveAndroid.

Por favor, si alguien sabe cómo rellenar listas extensibles de la base de datos por favor ayuda.

Pregunta: ¿Qué debo hacer para llenar correctamente ExpandableListView de la base de datos?

No soy un experto en ActiveAndroid.But aquí están los pasos para crear una lista expandible usando el cursor.

Necesita dos métodos en la clase auxiliar de db para recopilar las filas que necesitará.

 public Cursor fetchGroup() { String query = "SELECT * FROM rooms" return mDb.rawQuery(query, null); } public Cursor fetchChildren(String room) { String query = "SELECT * FROM devices WHERE id_room = '" + room + "'"; return mDb.rawQuery(query, null); } 

A continuación, debe configurar el adaptador (en su actividad):

  public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { public MyExpandableListAdapter(Cursor cursor, Context context,int groupLayout, int childLayout, String[] groupFrom, int[] groupTo, String[] childrenFrom, int[] childrenTo) { super(context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, childrenTo); } } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { Cursor childCursor = mDbHelper.fetchChildren(groupCursor.getString(groupCursor.getColumnIndex("id_room")); getActivity().startManagingCursor(childCursor); childCursor.moveToFirst(); return childCursor; } } 

Y, finalmente, llame al adaptador y configúrelo a su lista (en su actividad):

 private void fillData() { mGroupsCursor = mDbHelper.fetchGroup(); getActivity().startManagingCursor(mGroupsCursor); mGroupsCursor.moveToFirst(); ExpandableListView elv = (ExpandableListView) getActivity().findViewById(android.R.id.list); mAdapter = new MyExpandableListAdapter(mGroupsCursor, getActivity(), R.layout.rowlayout_expgroup, // Your row layout for a group R.layout.rowlayout_itemlist_exp, // Your row layout for a child new String[] { "id_room" }, // Field(s) to use from group cursor new int[] { android.R.id.room }, // Widget ids to put group data into new String[] { "name_device", "state_device" }, // Field(s) to use from child cursors new int[] { R.id.device, R.id.state }); // Widget ids to put child data into lv.setAdapter(mAdapter); // set the list adapter. } } 

Así que todos juntos código

 public class List_Exp extends Activity { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mDbHelper = new YourDB(getActivity()); mDbHelper.open(); fillData(); } private void fillData() { // set list adapter here } public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { // Your adapter } } 

Si desea capturar el evento de clic en group / child, entonces maneje eventos:

 lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // Your child click code here return true; } }); lv.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, int groupPosition, long id) { // Your group click code here return true; } }); 
  • La mejor manera de unir tablas usando sqlite en android
  • Sincronización local de SQLite con Firebase
  • Nuevo carácter de línea \ n no se muestra correctamente en textView Android
  • ¿El cursor SQLite de Android carga todos los registros en la memoria a la vez?
  • ¿Puede un proyecto de biblioteca de Android tener su propia base de datos SQLite?
  • Tamaño máximo de Android Cursor
  • ¿Cómo puedo simular una actualización de la aplicación?
  • Número de versión para SQLite DB
  • Sqlite cómo obtener elementos de cadena con el cursor
  • SQLite dispara en Android?
  • ¿Cómo utilizar mi propia base de datos sqlite?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.