Android ExpandableListView二级列表父级一个接口,子级一个接口实现

上一篇是用一个接口实现两级列表的,由于数据较多原因,假如一次性返回几百条数据的话影响性能,所以后台将另一个功能的分为两个接口实现。请求到父级数据后,点击父级数据再去请求子级数据,分为两个接口实现二级列表。

界面布局与上一篇文章的一样,就不再贴出来了,需要可以去参考上一级,这里只做代



import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.databinding.DataBindingUtil;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;


import org.apache.http.HttpException;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;
import java.util.List;

/**
 * 
 * 
 * Created by admin on 2019/4/12
 */
public class NewCircuitActivity extends BaseActivity  {
    private CartwotypeLayoutBinding newcircuit;
    private CarCircuitAdapter circuitAdapter;

    private String carid, type, is_vip, title_name;
    private String circuit_id;

    private String zx_url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        newcircuit = DataBindingUtil.setContentView(this, R.layout.cartwotype_layout);

        newcircuit.tvManual.setOnClickListener(this);
        newcircuit.tvMajor.setOnClickListener(this);

        carid = getIntent().getExtras().getString("pinpai");
        type = getIntent().getExtras().getString("type");
        is_vip = getIntent().getExtras().getString("is_vip");
        title_name = getIntent().getExtras().getString("title_name");
        initEven();
        if (carid != null) {
            setTitle(title_name);
            postrequest();
            initCircuitData();
            initBrand();
        }
        circuitAdapter = new CarCircuitAdapter(this);
        newcircuit.reCarType.setAdapter(circuitAdapter);

        //点击父级请求子级数据
        newcircuit.reCarType.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
            @Override
            public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {

                circuit_id = circuitAdapter.getGroup(groupPosition).getId();

                if (circuit_id != null && circuitAdapter.getGroup(groupPosition).getSon().size() == 0) {
                    CircuitNextData(groupPosition);
                }
                return false;
            }
        });

        //子级点击
        newcircuit.reCarType.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
                CartypeResponse.DataBean.ListBean.SonBean item = circuitAdapter.getChild(groupPosition, childPosition);
                if (item.getType().equals("1")) {
                    PermissionUtils.getEngine().persissionWith(NewCircuitActivity.this, "3", type, item.getIdflag(), item.getIs_check_sj(), item.getIs_check_sf(), item.getIs_check_zy(), item.getIs_check_vip(), "0");
                } else {
                    PermissionUtils.getEngine().persissionWith(NewCircuitActivity.this, "3", type, item.getIdflag(), item.getIs_check_sj(), item.getIs_check_sf(), item.getIs_check_zy(), item.getIs_check_vip(), "1");
                }
                return false;
            }
        });
    }


    //详情请求参数
    private String postrequest() {
        String data = "";
        try {
            JSONObject ClientKey = new JSONObject();
            ClientKey.put("pinpai", carid);
            ClientKey.put("type", type);
            data = NetInterfaceEngine.getEngine().jsonData(ClientKey);
            Log.e("车型参数是----", data);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return data;
    }


    private void initCircuitData() {
//        showProgressDialog();
        String url = Constant.GETBOOK;
        String json = postrequest();
        NetInterfaceEngine.getEngine().commitOKHttpJson(url, json, new NetHelper() {
            @Override
            public void onSuccess(String result) {
                if (result == null) {
                    Toast.makeText(NewCircuitActivity.this, R.string.net_response, Toast.LENGTH_SHORT).show();
                    return;
                }
                dismissProgressDialog();
                CartypeResponse emty = JSONUtil.parse(result, CartypeResponse.class);
                if (emty.getData() != null && emty.getStatus().equals("ok")) {
                    List<CartypeResponse.DataBean.ListBean> circuit_data = emty.getData().getList();//第一级数据
                    circuitAdapter.addGroupList(circuit_data);

                    if (emty.getData().getList().size() == 0) {
                        newcircuit.ilNodata.lineNodataView.setVisibility(View.VISIBLE);
                        newcircuit.reCarType.setVisibility(View.GONE);
                    }
                } else {
                    if (emty != null && emty.getMessage() != null) {  //添加错误为空判断
                        toast(emty.getMessage());
                    } else {
                        toast("服务器繁忙,请稍候再试");
                    }
                }
            }

            @Override
            public void onFail(HttpException e, String err) {
                Toast.makeText(NewCircuitActivity.this, "网络异常!", Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }
        });
    }


    //子级请求参数
    private String nextrequest() {
        String data = "";
        try {
            JSONObject ClientKey = new JSONObject();
            ClientKey.put("chexing", circuit_id);
            ClientKey.put("type", type);
            data = NetInterfaceEngine.getEngine().jsonData(ClientKey);
        } catch (JSONException e) {
            e.printStackTrace();
        }
        return data;
    }

    private void CircuitNextData(final int position) {
//        showProgressDialog();
        String url = Constant.CARCIRCUIT;
        String json = nextrequest();
        NetInterfaceEngine.getEngine().commitOKHttpJson(url, json, new NetHelper() {
            @Override
            public void onSuccess(String result) {
                if (result == null) {
                    Toast.makeText(NewCircuitActivity.this, R.string.net_response, Toast.LENGTH_SHORT).show();
                    return;
                }
                dismissProgressDialog();
                CircuitResponse emty = JSONUtil.parse(result, CircuitResponse.class);
                if (emty.getData() != null && emty.getStatus().equals("ok")) {


                    List<CircuitResponse.DataBean.ListBean> circuit_data = emty.getData().getList();//第一级数据
                    if (circuit_data != null && circuit_data.size() > 0) {
                        List<CartypeResponse.DataBean.ListBean.SonBean> mlist = new ArrayList<>();
                        for (int i = 0; i < circuit_data.size(); i++) {
                            CartypeResponse.DataBean.ListBean.SonBean item = new CartypeResponse.DataBean.ListBean.SonBean();

                            item.setType(circuit_data.get(i).getType());
                            item.setBook_name(circuit_data.get(i).getBook_name());
                            item.setPtitle(circuit_data.get(i).getPtitle());
                            item.setTitle(circuit_data.get(i).getTitle());
                            item.setIdflag(circuit_data.get(i).getIdflag());

                            item.setIs_check_vip(circuit_data.get(i).getIs_check_vip());
                            item.setIs_check_sf(circuit_data.get(i).getIs_check_sf());
                            item.setIs_check_sj(circuit_data.get(i).getIs_check_sj());
                            item.setIs_check_zy(circuit_data.get(i).getIs_check_zy());

                            mlist.add(item);
                        }
                        circuitAdapter.addAllChild(position, mlist);
                    }

                    List<CircuitResponse.DataBean.Zldata> zldataList = emty.getData().getZslist();//第二组数据
                    if (zldataList != null && zldataList.size() > 0) {
                        List<CartypeResponse.DataBean.ListBean.SonBean> list = new ArrayList<>();
                        for (int i = 0; i < zldataList.size(); i++) {
                            CartypeResponse.DataBean.ListBean.SonBean item = new CartypeResponse.DataBean.ListBean.SonBean();

                            item.setType(zldataList.get(i).getType());
                            item.setBook_name(zldataList.get(i).getBook_name());
                            item.setPtitle(zldataList.get(i).getPtitle());
                            item.setTitle(zldataList.get(i).getTitle());
                            item.setIdflag(zldataList.get(i).getIdflag());

                            item.setIs_check_vip(zldataList.get(i).getIs_check_vip());
                            item.setIs_check_sf(zldataList.get(i).getIs_check_sf());
                            item.setIs_check_sj(zldataList.get(i).getIs_check_sj());
                            item.setIs_check_zy(zldataList.get(i).getIs_check_zy());

                            list.add(item);
                        }
                        circuitAdapter.addAllChild(position, list);
                    }
                } else {
                    if (emty != null && emty.getMessage() != null) {  //添加错误为空判断
                        toast(emty.getMessage());
                    } else {
                        toast("服务器繁忙,请稍候再试");
                    }
                }
            }

            @Override
            public void onFail(HttpException e, String err) {
                Toast.makeText(NewCircuitActivity.this, "网络异常!", Toast.LENGTH_SHORT).show();
                dismissProgressDialog();
            }
        });
    }


    /**
     * Expandable适配器
     */
    class CarCircuitAdapter extends BaseExpandableListAdapter {
        private Context context;
        private List<CartypeResponse.DataBean.ListBean> group = new ArrayList<>(); //父级


        public CarCircuitAdapter(Context context) {
            this.context = context;

        }

        public void addGroupList(List<CartypeResponse.DataBean.ListBean> mgroup) {
            if (mgroup != null) {

                group.addAll(mgroup);
                for (int i = 0; i < mgroup.size(); i++) {
                    List<CartypeResponse.DataBean.ListBean.SonBean> mchild = new ArrayList<>();
                    group.get(i).setSon(mchild);
                }

            }
            notifyDataSetChanged();
        }

        public void addAllChild(int position, List<CartypeResponse.DataBean.ListBean.SonBean> mchild) {
            group.get(position).getSon().addAll(mchild);
            notifyDataSetChanged();
        }

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

        @Override
        public CartypeResponse.DataBean.ListBean getGroup(int groupPosition) {
            return group.get(groupPosition);
        }

        @Override
        public int getChildrenCount(int groupPosition) {
            return group.get(groupPosition).getSon().size();
        }


        @Override
        public CartypeResponse.DataBean.ListBean.SonBean getChild(int groupPosition, int childPosition) {
            return group.get(groupPosition).getSon().get(childPosition);
        }

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

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

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

        /**
         * 获取显示指定组的视图对象
         *
         * @param groupPosition 组位置
         * @param isExpanded    该组是展开状态还是伸缩状态
         * @param convertView   重用已有的视图对象
         * @param parent        返回的视图对象始终依附于的视图组
         * @return
         * @see android.widget.ExpandableListAdapter#getGroupView(int, boolean,
         * View, ViewGroup)
         */
        @SuppressLint("SetTextI18n")
        @Override
        public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.recycleview_item_parent, null);
                holder = new ViewHolder();
                holder.textView = (TextView) convertView.findViewById(R.id.tv_car_parent_list);
                holder.is_new = convertView.findViewById(R.id.is_new);
                holder.car_up_img = convertView.findViewById(R.id.car_up_img);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.textView.setText("[ " + group.get(groupPosition).getPid_name() + " ]  " + group.get(groupPosition).getKeyword1());
            if (type.equals("18")) {
                if (group.get(groupPosition).getIs_new().equals("1")) {
                    holder.is_new.setVisibility(View.VISIBLE);
                } else {
                    holder.is_new.setVisibility(View.GONE);
                }
            }
            holder.textView.setPadding(10, 10, 0, 10);

            //判断isExpanded就可以控制是按下还是关闭,同时更换图片
            if (isExpanded) {
                holder.car_up_img.setBackgroundResource(R.mipmap.arrow_up);
            } else {
                holder.car_up_img.setBackgroundResource(R.mipmap.arrow_down);
            }

            return convertView;
        }

        /**
         * 获取一个视图对象,显示指定组中的指定子元素数据。
         *
         * @param groupPosition 组位置
         * @param childPosition 子元素位置
         * @param isLastChild   子元素是否处于组中的最后一个
         * @param convertView   重用已有的视图(View)对象
         * @param parent        返回的视图(View)对象始终依附于的视图组
         * @return
         * @see android.widget.ExpandableListAdapter#getChildView(int, int, boolean,
         * View, ViewGroup)
         */
        @SuppressLint("SetTextI18n")
        @Override
        public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
            ViewHolder holder;
            if (convertView == null) {
                convertView = LayoutInflater.from(context).inflate(R.layout.car_circuit_item, null);
                holder = new ViewHolder();
                holder.tv_car_circuit = (TextView) convertView.findViewById(R.id.tv_car_circuit);
                holder.re_cartype_circuit = (RelativeLayout) convertView.findViewById(R.id.re_cartype_circuit);
                holder.tv_sj = (TextView) convertView.findViewById(R.id.tv_sj);
                holder.tv_sf = (TextView) convertView.findViewById(R.id.tv_sf);
                holder.tv_zy = (TextView) convertView.findViewById(R.id.tv_zy);
                holder.tv_vip = (TextView) convertView.findViewById(R.id.tv_vip);
                holder.lin_circuit = convertView.findViewById(R.id.lin_circuit);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            CartypeResponse.DataBean.ListBean.SonBean child = getChild(groupPosition, childPosition);
            if (child.getIs_check_sj().equals("1")) {
                holder.tv_sj.setVisibility(View.VISIBLE);
            } else {
                holder.tv_sj.setVisibility(View.GONE);
            }
            if (child.getIs_check_sf().equals("1")) {
                holder.tv_sf.setVisibility(View.VISIBLE);
            } else {
                holder.tv_sf.setVisibility(View.GONE);
            }
            if (child.getIs_check_zy().equals("1")) {
                holder.tv_zy.setVisibility(View.VISIBLE);
            } else {
                holder.tv_zy.setVisibility(View.GONE);
            }
            if (child.getIs_check_vip().equals("1")) {
                holder.tv_vip.setVisibility(View.VISIBLE);
            } else {
                holder.tv_vip.setVisibility(View.GONE);
            }

            if (child.getType().equals("1") && child.getBook_name() != null && child.getPtitle() != null && child.getTitle() != null) {  //==1,表示资料数据
                holder.tv_car_circuit.setText("[ " + child.getBook_name() + " ]" + " " + child.getPtitle() + "-" + child.getTitle());
            } else {
                holder.tv_car_circuit.setText(child.getTitle());
            }
            holder.tv_car_circuit.setPadding(40, 0, 0, 0);
            holder.lin_circuit.setPadding(40, 0, 0, 0);
            return convertView;
        }

        /**
         * 是否选中指定位置上的子元素。
         * 让isChildSelectable方法返回true,解决ExpandableListView中子元素无法点击,OnChildClickListener无效
         *
         * @param groupPosition
         * @param childPosition
         * @return
         * @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
         */
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return true;
        }

        class ViewHolder {
            TextView textView, is_new;
            ImageView car_up_img;

            TextView tv_car_circuit;
            TextView tv_sf, tv_zy, tv_vip, tv_sj;
            RelativeLayout re_cartype_circuit;
            LinearLayout lin_circuit;
        }
    }
}

码的,参考思路即可。

猜你喜欢

转载自blog.csdn.net/qq_19714505/article/details/89356773