Android - 如何在Expandable listview中显示数据

时间:2017-09-08 06:15:18

标签: android json parsing expandablelistview

我正在解析Expandable listview中的API数据 但在可扩展组中,我得到了同一个孩子。

解析数据后,格式错误。

请帮助我清楚这件事。

但我想用这种格式

1. Car
     1. Audi
     2. New
2. Animal
     1. Dogs
     2. Cat

请建议我错在哪里。

这是我的json

 "status": 1,
        "category": [
            {
                "id": 1,
                "category_name_en": "car",
                "category_name_ar": "car",
                "description_en": "",
                "description_ar": "",
                "day": "monday,tuesday,wednesday,thursday,friday,saturday,sunday",
                "status": "A",
                "created_at": "Sep 4 2017 8:09 AM",
                "updated_at": "Sep 4 2017 8:09 AM",
                "sub_category": [
                    {
                        "id": 1,
                        "sub_category_name_en": "Audi",
                        "sub_category_name_ar": "Audi",
                        "sub_description_en": "",
                        "sub_description_ar": "",
                        "status": "A",
                        "created_at": "Sep 4 2017 8:10 AM",
                        "updated_at": "Sep 4 2017 8:10 AM"
                    },
                    {
                        "id": 4,
                        "sub_category_name_en": "New",
                        "sub_category_name_ar": "New",
                        "sub_description_en": "",
                        "sub_description_ar": "",
                        "status": "A",
                        "created_at": "Sep 4 2017 9:45 AM",
                        "updated_at": "Sep 4 2017 9:45 AM"
                    }
                ]
            },
            {
                "id": 2,
                "category_name_en": "Animal",
                "category_name_ar": "Animal",
                "description_en": "",
                "description_ar": "",
                "day": "monday,tuesday,wednesday,thursday,friday,saturday,sunday",
                "status": "A",
                "created_at": "Sep 4 2017 9:19 AM",
                "updated_at": "Sep 4 2017 9:19 AM",
                "sub_category": [
                    {
                        "id": 2,
                        "sub_category_name_en": "Dogs",
                        "sub_category_name_ar": "Dogs",
                        "sub_description_en": "",
                        "sub_description_ar": "",
                        "status": "A",
                        "created_at": "Sep 4 2017 9:20 AM",
                        "updated_at": "Sep 4 2017 9:20 AM"
                    },
                    {
                        "id": 3,
                        "sub_category_name_en": "Cat",
                        "sub_category_name_ar": "Cat",
                        "sub_description_en": "",
                        "sub_description_ar": "",
                        "status": "A",
                        "created_at": "Sep 4 2017 9:21 AM",
                        "updated_at": "Sep 4 2017 9:21 AM"
                    }
                ]
            }
        ]
    }

这是我的解析 这是我的Json。我使用了两个模型类ModelGroup和ModelChid。

ModelGroup LT = null;
                ModelChild CT = null;
String response = result.getResult().toString();
                JSONObject jsonRoot = new JSONObject(response);
                JSONArray jsonArray = jsonRoot.getJSONArray("category");

                for (int i = 0; i < jsonArray.length(); i++) {
                    LT= new ModelGroup();

                    JSONObject jsonObject = jsonArray.getJSONObject(i);
                    LT.setCat_name(jsonObject.getString("category_name_en"));
                  //  LT.setCat_id(jsonObject.getString("id"));
                    modelgroup.add(LT);
                    JSONArray jsonArray1 = jsonObject.getJSONArray("sub_category");
                    for (int j = 0; j < jsonArray1.length(); j++) {
                        CT = new ModelChild();

                        JSONObject jsonObject2 = null;

                        jsonObject2 = jsonArray1.getJSONObject(j);

                        CT.setSub_category_name_en(jsonObject2.getString("sub_category_name_en"));

                    }

                 //get(i).get(i).add(CT);

                    modelchild.add(CT);

                        ListChildXXXXXXXXX.add(modelchild);

                }

这是我的适配器

 public class ExpandableAdpeter extends BaseExpandableListAdapter {
    Context context;
    ArrayList<ModelGroup> ListTerbaru;
    ArrayList<ArrayList<ModelChild>> ListChildTerbaru;
    int count;

    public ExpandableAdpeter (Context context, ArrayList<ModelGroup>ListTerbaru, ArrayList<ArrayList<ModelChild>> ListChildTerbaru){
        this.context=context;
        this.ListTerbaru=ListTerbaru;
        this.ListChildTerbaru=ListChildTerbaru;
//      this.count=ListTerbaru.size();
//      this.count=ListChildTerbaru.size();
    }
    @Override
    public boolean areAllItemsEnabled()
    {
        return true;
    }


    @Override
    public ModelChild getChild(int groupPosition, int childPosition) {
        return ListChildTerbaru.get(groupPosition).get(childPosition);

    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {

        ModelChild childTerbaru = getChild(groupPosition, childPosition);
        ViewHolder holder= null;

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_child, null);

            holder=new ViewHolder();
            holder.begdate1=(TextView)convertView.findViewById(R.id.tv_listchild);
            holder.enddate1=(TextView)convertView.findViewById(R.id.tv_listchilds);
            convertView.setTag(holder);


        }
        else{
            holder=(ViewHolder)convertView.getTag();
        }

        holder.begdate1.setText(childTerbaru.getCat_id());
        holder.enddate1.setText(childTerbaru.getSub_category_name_en());

        return convertView;
    }
    @Override
    public int getChildrenCount(int groupPosition) {

        return ListChildTerbaru.get(groupPosition).size();
    }

    @Override
    public ModelGroup getGroup(int groupPosition) {
        return ListTerbaru.get(groupPosition);
    }

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

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

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {

        ModelGroup terbaruModel = (ModelGroup) getGroup(groupPosition);
        ViewHolder holder= null;
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);

            holder=new ViewHolder();
            holder.nama=(TextView)convertView.findViewById(R.id.tv_listtitle);
            holder.alamat=(TextView)convertView.findViewById(R.id.tv_listtitles);
            convertView.setTag(holder);

        }

        else{
            holder=(ViewHolder)convertView.getTag();
        }

        holder.nama.setText(terbaruModel.getCat_name());
        holder.alamat.setText(terbaruModel.getCat_id());

        return convertView;
    }

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

    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
        return true;
    }


    static class ViewHolder{
        TextView begdate1, enddate1,nama, alamat, imageid;
    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试以下代码。有一个适配器类,对于使用pojo类的可扩展列表视图显示非常有用。

Rails.application.routes.draw do