我已经解决了当数据是动态的并且来自 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;
}