Как исправить данные Group и Children, извлеченные из базы данных SQLite, в Expandable Listview - PullRequest
0 голосов
/ 03 января 2019

В основной деятельности Java я загрузил данные в моем методе initData, однако, когда я запускаю приложение, группировка категорий перечисляет только одну категорию из базы данных с элементами списка данных для каждого списка категорий.Правильное функционирование - перечислять все данные категории, а затем списки элементов под каждой группировкой.Ниже приведен мой код

. Я создал представление расширяемого списка в XML, а также создал класс адаптера расширяемого списка, который извлекает категорию элементов и список категорий элементов из двух таблиц в моей базе данных SQLite.В основной деятельности Java я загрузил данные, однако, когда я запускаю приложение, группировка категорий перечисляет только одну категорию из базы данных с элементами списка данных.

это мой метод initData

     private void initData() {


        Cursor category1 = controller.categotyforGroupedLv();
        Cursor itemListCategory = controller.getFPMsster();
        listDataHeader = new ArrayList<>();
        List<String> listDataItem = new ArrayList<>();
        listHash = new HashMap<>();

        if (category1.getCount() != 0) {
            //move to the first row
            category1.moveToFirst();
           // Toast.makeText(this, "Data found", Toast.LENGTH_SHORT).show();
            //return;
        }


        for (int i = 0; i < category1.getCount(); i++) {

            while (category1.moveToNext()) {
                while (itemListCategory.moveToNext()) {
                    listDataHeader.add(" " + category1.getString(1));
                    listDataItem.add(" " + itemListCategory.getString(2));

                }
                listHash.put(listDataHeader.get(0), listDataItem);
            }


        }
    }

}

это мой расширяемый класс адаптера списка

public class ExpandableListAdapter extends BaseExpandableListAdapter {
    private Context context;
    private List<String> listDataHeader;
    private HashMap<String,List<String>> listHashMap;

    public ExpandableListAdapter(Context context, List<String> listDataHeader, HashMap<String, List<String>> listHashMap) {
        this.context = context;
        this.listDataHeader = listDataHeader;
        this.listHashMap = listHashMap;
    }

    @Override
    public int getGroupCount() {
        return listDataHeader.size();
    }

    @Override
    public int getChildrenCount(int i) {
        return listHashMap.get(listDataHeader.get(i)).size();
    }

    @Override
    public Object getGroup(int i) {
        return listDataHeader.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return listHashMap.get(listDataHeader.get(i)).get(i1);   //i = group item , i1 =Child item
    }

    @Override
    public long getGroupId(int i) {
        return i;
    }

    @Override
    public long getChildId(int i, int i1) {
        return i1;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
        String headerTitle = (String)getGroup(i);
        if (view == null)
        {
            LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.order_taking_screen_listgroup_for_listview, null);
        }
        TextView listheader1 = (TextView)view.findViewById(R.id.listheader);
        listheader1.setTypeface(null, Typeface.BOLD);
        listheader1.setText(headerTitle);
        return view;
    }

    @Override
    public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
       final String childText = (String)getChild(i, i1);
       if(view == null)
       {
           LayoutInflater inflater = (LayoutInflater)this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           view = inflater.inflate(R.layout.order_taking_screen_listitem_for_listview, null);
       }
        TextView listchild = (TextView)view.findViewById(R.id.listitem);
        listchild.setText(childText);
        return view;

    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return true;
    }
}

1 Ответ

0 голосов
/ 04 января 2019

Попробуйте это:

private void initData() {
    Cursor category1 = controller.categotyforGroupedLv();
    Cursor itemListCategory;
    listDataHeader = new ArrayList<>();
    listHash = new HashMap<>();
    if (category1.getCount() != 0) {
        //move to the first row
        category1.moveToFirst();
        // Toast.makeText(this, "Data found", Toast.LENGTH_SHORT).show();
        //return;

        while (category1.moveToNext()) {
            listDataHeader.add(" " + category1.getString(1));

            // Child item should be based on group data.
            itemListCategory = controller.getFPMsster(category1.getString(1));

            // Create single child list.
            List<String> listDataItem = new ArrayList<>();
            if (itemListCategory.getCount() != 0) {
                while(itemListCategory.moveToNext()) {
                    listDataItem.add(" " + itemListCategory.getString(2));
                }
            }
            // Add single child into the overall child list.
            listHash.put(listDataHeader.get(listDataHeader.size() - 1), listDataItem);
        }
    }
}

Обратите внимание, что вам нужно изменить метод getFPMsster () на аргумент, поскольку курсор должен возвращать данные только для определенной группы. Вы также можете посмотреть по этой ссылке: GridView в ExpandableListView с базой данных Надеюсь, что это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...