1

如果我想要一个 ExpandableListView,它从服务器(JSON 数组)的响应中获取其组及其子级的数据。
我该怎么做?
我知道有 SimpleCursorTreeAdapter,但它只用于光标,我以前用过,但我需要任何等效的这个适配器才能将它与 JSON 数组一起使用

这是获取 groupItems 的函数

        protected void BindOrederItemList(final int order_id) 
    {
        // TODO Auto-generated method stub
        //select all categories from order items where order_id =??
        //select items where category=??
        String Url="http://192.168.3.113/mywebservices.php?op=GetOrderCategory&lang_id=1&order_id="+order_id;
        GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 
        {

            @Override
            public void onPostExecute(String result) {
                // TODO Auto-generated method stub
                if (result!=null)
                {
                    try
                    {

                 JSONArray jArray = new JSONArray(result);
                 HashMap<String, String> Catmap = new HashMap<String, String>();
               //  ArrayList<Integer> category=new ArrayList<Integer>();
                 for (int i = 0; i < jArray.length(); i++) 

                    {

                        JSONObject e = jArray.getJSONObject(i);
                            id=e.getInt("order_id");

                         cat_name=e.getString("cat_name");
                          cat_id=e.getInt("cat_id");
                          Catmap.put("cat_id",String.valueOf(cat_id));
                          Catmap.put("cat_name", cat_name);
                          catItemsList.add(Catmap);

                    }
                Log.i("Insid For Loop", "Group size = "+catItemsList.toArray());



                      //  Log.i("Bind item", "CAT SIZE "+catItemsList.size());

                        }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }

            }

        };

        try
        {
        GetNetworkData task = new GetNetworkData(Url,null,listener);
        task.execute();
        }
        catch(Exception e)
        {

            e.printStackTrace();

        }
    }

谢谢

4

2 回答 2

1

一种方法是使用SimpleExandableListAdapter

在这种情况下,您必须先获取 JSON 数据,然后将其存储为地图列表。您可以使用AsyncTaskLoader来完成,您可以在其中获取并重新打包数据,然后在后台创建适配器的新实例,然后将其交换到 ExandableListView。

于 2012-05-06T13:21:07.923 回答
1

我已经解决了当数据是动态的并且来自 mySQL 数据库(JSON 数组)时如何处理可扩展列表的问题,这就是答案

        protected void BindOrederItemList(final int order_id) 
    {
        // TODO Auto-generated method stub
        //select all categories from order items where order_id =??
        //select items where category=??

        JSONObject params = new JSONObject();
        //int    no_pepole=Integer.valueOf(noOfGest_txt.getText().toString());
            try
            {
        //  params.put("order_status",myStatus);
         int rest_id=prefs.getInt("Rest_id", 0);
            params.put("order_id", order_id);
            params.put("lang_id", 1);
            params.put("rest_id", rest_id );
            //params.put("order_status", 0);
        //  params.put("noOfpepole",number_of_guest);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }



        String Url="http://192.168.3.113/mywebservices.php?op=GetOrderCategory";
        GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 
        {

            @Override
            public void onPostExecute(String result) {
                // TODO Auto-generated method stub
                if (result!=null)
                {
                    try
                    {
                     catItemsList.clear();
                 JSONArray jArray = new JSONArray(result);
                 ArrayList<ArrayList<HashMap<String, String>>> list=new ArrayList<ArrayList<HashMap<String, String>>>();
               //  ArrayList<Integer> category=new ArrayList<Integer>();

                 for (int i = 0; i < jArray.length(); i++) 

                    {
                      HashMap<String, String> Catmap = new HashMap<String, String>();

                        JSONObject e = jArray.getJSONObject(i);
                            id=e.getInt("order_id");

                         cat_name=e.getString("cat_name");
                          cat_id=e.getInt("cat_id");
                          Catmap.put("cat_id",String.valueOf(cat_id));
                          Catmap.put("cat_name", cat_name);
                          catItemsList.add(Catmap);
                          Log.i("Insid For Loop", "order ID "+order_id);

                          list=  BindCatItems(cat_id, order_id);



                        Log.i("Insid For Loop", "Child size = "+list.size());
                    }
               // Log.i("Insid For Loop", "Group size = "+catItemsList.size());

                 SimpleExpandableListAdapter expandListAdapter= new SimpleExpandableListAdapter(getActivity(), 
                          catItemsList,  R.layout.group_item, 
                          new String[] {"cat_name"},new int[]{R.id.lbl_cat_group},
                          BindCatItems(cat_id, order_id), R.layout.category_row, new String[]{"item_name"}, new int[]{R.id.txt_category_row});


                 order_items_list.setAdapter(expandListAdapter);
                      //  Log.i("Bind item", "CAT SIZE "+catItemsList.size());

                        }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }

            }

        };

        try
        {
        GetNetworkData task = new GetNetworkData(Url,params,listener);
        task.execute();
        }
        catch(Exception e)
        {

            e.printStackTrace();

        }
    }

    protected ArrayList<ArrayList<HashMap<String, String>>> BindCatItems(int cat_id,int order_id)

    {
        // TODO Auto-generated method stub
        ItemsList.clear();
        JSONObject params = new JSONObject();

        //int    no_pepole=Integer.valueOf(noOfGest_txt.getText().toString());
            try
            {
        //  params.put("order_status",myStatus);
         int rest_id=prefs.getInt("Rest_id", 0);
            params.put("order_id", order_id);
            params.put("lang_id", 1);
            params.put("cat_id",cat_id );
            //params.put("order_status", 0);
        //  params.put("noOfpepole",number_of_guest);
            }
            catch(Exception e)
            {
                e.printStackTrace();
            }


        String Url="http://192.168.3.113/mywebservices.php?op=GetOrderItems";
        GetNetworkData.OnPostExecuteListener listener=new GetNetworkData.OnPostExecuteListener() 

        {

            @Override
            public void onPostExecute(String result) {
                // TODO Auto-generated method stub
                if (result!=null)
                {
                    try
                    {
                        Log.i("log bind","Inside Bind Category items");
                        // catItemsList.clear();
                         ArrayList<HashMap<String, String>> mapList = 
                                  new ArrayList<HashMap<String, String>>(); 
                        JSONArray jArray = new JSONArray(result);

                            for (int i = 0; i < jArray.length(); i++) 
                            {
                                HashMap<String, String> map = new HashMap<String, String>();

                                JSONObject e = jArray.getJSONObject(i);

                                int id=e.getInt("item_id");
                                if (id==0)
                                {

                                }


                                else
                                {



                                map.put("item_id",String.valueOf(e.getInt("item_id")));
                                map.put("oi_id", String.valueOf(e.getInt("oi_id")));
                                map.put("item_name", e.getString("item_name"));
                                map.put("quantity",String.valueOf( e.getString("quantity")));
                                map.put("price", String.valueOf("price"));
                       mapList.add(map);

                                }
                            }

                            ItemsList.add(mapList);

                         //   Log.i("Bind Item Order", "CAT SIZE "+catItemsList.size());



                           /*  ItemsAdapter=new SimpleAdapter(getActivity(), catItemsList, 
                                    R.layout.list_item,
                                    new String[] {"item_name"},
                                    new int[]{R.id.list_item_title});
                           */
                           //  Log.i("Add Section","ItemsAdapter count= "+ItemsAdapter.getCount());


                             //order_list.setAdapter(adapter);
                            //adapter.notifyDataSetChanged();
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            }
        };

        try
        {
        GetNetworkData task = new GetNetworkData(Url,params,listener);
        task.execute();
        }
        catch(Exception e)
        {

            e.printStackTrace();

        }
        return ItemsList;


    }
于 2012-05-09T08:01:52.190 回答