【发布时间】:2017-11-22 13:20:36
【问题描述】:
private ArrayList<String> listDataHeader;
private HashMap<String, List<String>> listDataChild;
ExpandableListAdapter listAdapter;
ExpandableListView expListView;
private int i,j,k;
List<String> addChild=new ArrayList<String>();
private List<Guide> guideList=new ArrayList<>();
在 onCreate 我已经完成了
expListView=(ExpandableListView)findViewById(R.id.expandableListView);
prepareDataList();
listAdapter=new MyExpandableListAdapter(this,listDataHeader,listDataChild);
expListView.setAdapter(listAdapter);
}
这里是 prepareDataList() 方法 - 这是准备好的列表数据,我在其中获取类别和子项目数据
private void prepareDataList() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
这是从响应中获取类别数据的改造
Retrofit retrofit = apiClient.getClient();
apiRest service = retrofit.create(apiRest.class);
Call<List<Category>> call = service.categorriesList();
call.enqueue(new Callback<List<Category>>() {
@Override
public void onResponse(@NonNull Call<List<Category>> call, @NonNull
final Response<List<Category>> response) {
if (response.isSuccessful()){
for (i=0;i<response.body().size();i++){
这里我将响应类别标题数据添加到 listDataHeader 此外,我创建了下一个改造响应,以通过 response.body().get(i).getId.toString() 从类别 id 获取项目列表;
listDataHeader.add(response.body().get(i).getTitle());
Retrofit retrofit1 = apiClient.getClient();
apiRest service1 = retrofit1.create(apiRest.class);
Call<List<Guide>> call1 =
service1.guidesByCategory(response.body().get(i).getId().toString());
call1.enqueue(new Callback<List<Guide>>() {
@Override
public void onResponse(@NonNull Call<List<Guide>>
call1, @NonNull Response<List<Guide>> response1) {
if (response1.isSuccessful()){
if (response1.body().size()!=0){
for (j=0;j<response1.body().size();j++){
guideList.add(response1.body().get(j));
addChild.add(guideList.get(j).getTitle());
}
}
}
}
@Override
public void onFailure(Call<List<Guide>> call1, Throwable t) {
}
});
listDataChild.put(listDataHeader.get
(listDataHeader.size()-1),addChild);
addChild.clear();
listDataHeader.clear();
Log.e("PARENT_AND_CHILD","PARENT IS ="+(listDataHeader.size()-1)+" AND
CHILD IS ="+addChild);
}
}
}
@Override
public void onFailure(Call<List<Category>> call, Throwable t) {
}
});
}
这是我创建的适配器
package com.stackheaps.how_to.adapter;
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;
public MyExpandableListAdapter(Context context, List<String> listDataHeader,
HashMap<String, List<String>> listChildData) {
this._context = context;
this._listDataHeader = listDataHeader;
this._listDataChild = listChildData;
}
@Override
public int getGroupCount() {
return this._listDataHeader.size();
}
@Override
public int getChildrenCount(int i) {
return this._listDataChild.get(this._listDataHeader.get(i))
.size();
}
@Override
public Object getGroup(int i) {
return this._listDataHeader.get(i);
}
@Override
public Object getChild(int i, int i1) {
return this._listDataChild.get(this._listDataHeader.get(i)).get(i1);
}
@Override
public long getGroupId(int i) {
return i;
}
@Override
public long getChildId(int i, int i1) {
return i1;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) {
String headerTitle=(String)getGroup(i);
if(view==null){
LayoutInflater layoutInflater=(LayoutInflater)_context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.list_group,null);
}
TextView txtHeader=(TextView)view.findViewById(R.id.listTitle);
txtHeader.setTypeface(null, Typeface.BOLD);
txtHeader.setText(headerTitle);
return view;
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
final String childText=(String)getChild(i,i1);
if(view==null){
LayoutInflater layoutInflater=(LayoutInflater) _context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view=layoutInflater.inflate(R.layout.list_item,null);
}
TextView txtChild=(TextView)view.findViewById(R.id.expandedListItem);
txtChild.setText(childText);
return view;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return false;
}
}
【问题讨论】:
-
请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
标签: android arraylist retrofit expandablelistview