[英]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.