上一篇是用一個接口實現兩級列表的,由於數據較多原因,假如一次性返回幾百條數據的話影響性能,所以後臺將另一個功能的分爲兩個接口實現。請求到父級數據後,點擊父級數據再去請求子級數據,分爲兩個接口實現二級列表。
界面佈局與上一篇文章的一樣,就不再貼出來了,需要可以去參考上一級,這裏只做代
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;
}
}
}
碼的,參考思路即可。