La lista secundaria de Android ExpandableListView tiene una interfaz para el padre y el hijo implementa una interfaz

El artículo anterior utilizó una interfaz para implementar una lista de dos niveles. Debido a la gran cantidad de datos, devolver cientos de datos a la vez afectaría el rendimiento, por lo que el fondo dividió otra función en dos interfaces para su implementación. Después de solicitar los datos principales, haga clic en los datos principales y luego solicite los datos secundarios, que se dividen en dos interfaces para implementar la lista secundaria.

El diseño de la interfaz es el mismo que el del artículo anterior, por lo que no lo publicaré más aquí. Puedes consultar el nivel anterior si lo necesitas. Esto es solo un proxy.



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

Para codificar, simplemente consulte las ideas.

Supongo que te gusta

Origin blog.csdn.net/qq_19714505/article/details/89356773
Recomendado
Clasificación