簡體   English   中英

Android-如何在展開式列表視圖中顯示數據

[英]Android - How to show data in Expandable listview

我正在從Expandable listview中的API解析數據,但是在Expandable組中,我得到了同一個孩子。

解析數據后,我得到了錯誤的格式。

請幫我弄清楚這件事。

但是我想要這種格式

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

您可以嘗試以下代碼。 有一個適配器類,對使用pojo類的可擴展列表視圖顯示很有用。

public class ExpandableOderHistoryAdapter extends BaseExpandableListAdapter {

    private Context _context;
    private List<MySaveOrder> header; // header titles
    private Boolean fromSaveOrder = false;
    // Child data in format of header title, child title
    //private HashMap<String, List<String>> child;
    Boolean forLoadMoreApi = false;

    SharedPreferences settings;

    int pageCount = 1;

    private static final String List_object = "ListObject";
    private static final String TAG_ORDER_NUMBER = "OrderNumber";
    private static final String TAG_ORDER_STATUS = "Status";
    private static final String TAG_ORDER_DATE = "OrderDate";
    private static final String TAG_COMMENT = "Comment";
    private static final String TAG_CUSTOMER_NAME = "CustomerName";
    private static final String TAG_ORDER_ID = "BuyerOrderID";

    public ExpandableOderHistoryAdapter(Context context, List<MySaveOrder> listDataHeader, Boolean fromWhere) {
        this._context = context;
        this.header = listDataHeader;
        this.fromSaveOrder = fromWhere;
        settings = context.getApplicationContext().getSharedPreferences("MYPreferences", Context.MODE_PRIVATE);
        //  this.child = listDataHeader.get(0).;
    }

    @Override
    public int getGroupCount() {
        // Get header size
        return this.header.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        // return children count
        return (this.header.get(groupPosition).getMyArray().length());
    }

    @Override
    public Object getGroup(int groupPosition) {
        // Get header position
        return this.header.get(groupPosition).getCreatedby();
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        // This will return the child
        return (this.header.get(groupPosition)).getMyArray();
    }

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

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

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

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

        // Getting header title
        MySaveOrder mOrder = header.get(groupPosition);

        String headerTitle = mOrder.getOrdernumber();
        String strOrderstatus = mOrder.getOrderstatus();
        String strOrderdate = mOrder.getOrderdate();
        String strComment = mOrder.getComment();
        String strCustomerName = mOrder.getCustomername();

        // Inflating header layout and setting text
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.expandable_row, parent, false);
        }

        LinearLayout lv = (LinearLayout) convertView.findViewById(R.id.lv);
        LinearLayout lvSaveorder = (LinearLayout) convertView.findViewById(R.id.lvSaveorder);
        TextView txtSrNo = (TextView) convertView.findViewById(R.id.txtSrNo);
        TextView txtOrderNo = (TextView) convertView.findViewById(R.id.txtOrderNo);
        TextView txtOrderStatus = (TextView) convertView.findViewById(R.id.txtOrderStatus);
        TextView txtOrderDate = (TextView) convertView.findViewById(R.id.txtOrderDate);
        TextView txtComment = (TextView) convertView.findViewById(R.id.txtComment);
        TextView txtSubmited = (TextView) convertView.findViewById(R.id.txtSubmited);

        TextView txtSrNoSaveorder = (TextView) convertView.findViewById(R.id.txtSrNoSaveorder);

        //TextView txtOrderStatusSaveorder = (TextView) convertView.findViewById(R.id.txtOrderStatusSaveorder);
      //  TextView txtOrderDateSaveorder = (TextView) convertView.findViewById(R.id.txtOrderDateSaveorder);
        TextView txtCommentSaveorder = (TextView) convertView.findViewById(R.id.txtCommentSaveorder);


       // ImageView imgArrow = (ImageView) convertView.findViewById(R.id.imgArrow);
       // ImageView imgArrowSaveorder = (ImageView) convertView.findViewById(R.id.imgArrowSaveorder);

        ImageView imgEdit = (ImageView) convertView.findViewById(R.id.imgEdit);

        imgEdit.setTag(groupPosition);

        if (fromSaveOrder) {

            lvSaveorder.setVisibility(View.VISIBLE);
            lv.setVisibility(View.GONE);

            txtSrNoSaveorder.setText(String.valueOf(groupPosition + 1));
          //  txtOrderStatusSaveorder.setText(strOrderstatus);
          //  txtOrderDateSaveorder.setText(strOrderdate);
            txtCommentSaveorder.setText(strComment);

           /* if (isExpanded) {
                imgArrowSaveorder.setImageResource((R.drawable.downarrow_blue));
            } else {
                imgArrowSaveorder.setImageResource((R.drawable.left_arrow));
            }*/

        } else {
            lvSaveorder.setVisibility(View.GONE);
            lv.setVisibility(View.VISIBLE);

            txtSrNo.setText(String.valueOf(groupPosition + 1));
            txtOrderNo.setText(headerTitle);
            txtOrderStatus.setText(strOrderstatus);
            txtOrderDate.setText(strOrderdate);
            txtComment.setText(strComment);
            txtSubmited.setText(strCustomerName);


           /* if (isExpanded) {
                imgArrow.setImageResource((R.drawable.downarrow_blue));
            } else {
                imgArrow.setImageResource((R.drawable.left_arrow));
            }*/
        }


        imgEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (_context instanceof MainActivity) {

                    MySaveOrder mOrder = header.get((Integer) view.getTag());

                    MainActivity mActivity = (MainActivity) _context;
                    mActivity.setEditOrderFragment(mOrder.getOrderid(), mOrder.getComment());

                }

            }
        });


        if (groupPosition == (header.size() - 1)) {
            if (!forLoadMoreApi && header.size() >= 19) {
                if (_context != null) {
                    if (Const.isNetworkAvailable(_context))
                        GetBuyerOrder();
                    else
                        Toast.makeText(_context, "Please Check Internet Connection...", Toast.LENGTH_SHORT).show();
                }

            }

        }

        return convertView;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        // Getting child text
        MySaveOrder mOrder = header.get(groupPosition);
        JSONArray jarr = mOrder.getMyArray();
        String childText = "", strQuantity = "", strNoOfCaton = "", strCartonQty = "";
        try {
            JSONObject jObj = jarr.getJSONObject(childPosition);
            childText = jObj.getString("ProductName");
            strQuantity = jObj.getString("ProductQuantity");
            strNoOfCaton = jObj.getString("NoOfCarton");
            strCartonQty = jObj.getString("CartonQuantity");

        } catch (JSONException e) {
            e.printStackTrace();
        }
        // Inflating child layout and setting textview
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.expandable_item, parent, false);
        }

        //set content in the child views

        LinearLayout lv = (LinearLayout) convertView.findViewById(R.id.lv);
        TextView txtSrNo = (TextView) convertView.findViewById(R.id.txtSrNo);
        TextView txtProductName = (TextView) convertView.findViewById(R.id.txtproductnameValue);
        TextView txtQuantity = (TextView) convertView.findViewById(R.id.txtQuantity);
        TextView txtNoOfCarton = (TextView) convertView.findViewById(R.id.txtNoOfCarton);
        TextView txtCatonQty = (TextView) convertView.findViewById(R.id.txtCatonQty);

        if (childPosition == 0) {
            lv.setVisibility(View.VISIBLE);
        } else
            lv.setVisibility(View.GONE);

        txtSrNo.setText(String.valueOf(childPosition + 1));
        txtProductName.setText(childText);
        txtNoOfCarton.setText(strNoOfCaton);
        txtCatonQty.setText(strCartonQty);
        txtQuantity.setText(strQuantity);
        return convertView;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM