上一篇是用一个接口实现两级列表的,由于数据较多原因,假如一次性返回几百条数据的话影响性能,所以后台将另一个功能的分为两个接口实现。请求到父级数据后,点击父级数据再去请求子级数据,分为两个接口实现二级列表。
界面布局与上一篇文章的一样,就不再贴出来了,需要可以去参考上一级,这里只做代
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;
}
}
}
码的,参考思路即可。