先来布局xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.a.datepickerdialogdemo.MainActivity">
<ExpandableListView
android:layout_width="match_parent"
android:scrollbars="none"
android:id="@+id/expandablelistview"
android:layout_height="match_parent"/>
</LinearLayout>
再来activity 很简单
public class MainActivity extends AppCompatActivity {
private ExpandableListView expandableList;
private ExpandCateAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
expandableList = (ExpandableListView) findViewById(R.id.expandablelistview);
adapter = new ExpandCateAdapter(this);
expandableList.setAdapter(adapter);
}
}
在来adapter
public class ExpandCateAdapter extends BaseExpandableListAdapter {
private Context context;
private ArrayList<SeondProductTypeMapEntity> groupList;
public ExpandCateAdapter(Context context,ArrayList<SeondProductTypeMapEntity> groupList){
this.context=context;
this.groupList=groupList;
}
@Override
public int getGroupCount() {
return groupList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return 1;
}
@Override
public Object getGroup(int groupPosition) {
return groupList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return groupList.get(groupPosition).thirdProductTypeMap.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 true;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
GroupViewHolder groupViewHolder;
if (convertView == null) {
groupViewHolder=new GroupViewHolder();
convertView=View.inflate(context, R.layout.item_group, null);
groupViewHolder.sort_tv_name=(TextView) convertView.findViewById(R.id.sort_tv_name);
groupViewHolder.iv_color= (ImageView) convertView.findViewById(R.id.iv_color);
convertView.setTag(groupViewHolder);
}else {
groupViewHolder=(GroupViewHolder) convertView.getTag();
}
SeondProductTypeMapEntity seondEntity=groupList.get(groupPosition);
groupViewHolder.sort_tv_name.setText(seondEntity.sortName);
if (groupPosition %3 == 0){
groupViewHolder.iv_color.setBackgroundResource(R.drawable.red);
}else if (groupPosition %3 == 1){
groupViewHolder.iv_color.setBackgroundResource(R.drawable.blue);
}else if (groupPosition %3 == 2){
groupViewHolder.iv_color.setBackgroundResource(R.drawable.yellow);
}
return convertView;
}
@Override
public View getChildView(final int groupPosition, final int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder childViewHolder;
if (convertView == null) {
childViewHolder=new ChildViewHolder();
convertView=View.inflate(context, R.layout.item_child, null);
childViewHolder.sort_grid=(MyGridView) convertView.findViewById(R.id.sort_grid);
convertView.setTag(childViewHolder);
}else {
childViewHolder=(ChildViewHolder) convertView.getTag();
}
ExpandChildAdapter childAdapter=new ExpandChildAdapter(context, groupList.get(groupPosition).thirdProductTypeMap);
childViewHolder.sort_grid.setAdapter(childAdapter);
childAdapter.notifyDataSetChanged();
childViewHolder.sort_grid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
Intent intent = new Intent(context, WebViewShopListActivity.class);
String url = Contants.GET_SORT_DETAILS_QIAN +groupList.get(groupPosition).thirdProductTypeMap.get(position).productTypeId + Contants.GET_SORT_DETAILS_HOU;
intent.putExtra(Contants.INTENT_URL, url);
Log.d("url==", url);
context.startActivity(intent);
}
});
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
class GroupViewHolder{
private TextView sort_tv_name;
private ImageView iv_color;
}
class ChildViewHolder{
private MyGridView sort_grid;
}
}
里面子条目GridView的adapter
public class ExpandChildAdapter extends BaseAdapter {
private Context context;
private ArrayList<ThirdProductTypeMapEntity> list;
private String base_image_url= PreferenceManager.getInstance().getSaveStringData(Contants.IMAGE_URL,"");
private DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheInMemory(true).cacheOnDisk(true).showImageOnLoading(R.drawable.iv_mrbj)
.imageScaleType(ImageScaleType.IN_SAMPLE_INT).build();
public ExpandChildAdapter(Context context,ArrayList<ThirdProductTypeMapEntity> list){
this.context=context;
this.list=list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null ) {
holder=new ViewHolder();
convertView=View.inflate(context, R.layout.item_sort_gridview, null);
holder.iv_sorp=(ImageView) convertView.findViewById(R.id.iv_sorp);
holder.tv_sorp_name=(TextView) convertView.findViewById(R.id.tv_sorp_name);
convertView.setTag(holder);
}else {
holder=(ViewHolder) convertView.getTag();
}
ThirdProductTypeMapEntity thirdEntity=list.get(position);
holder.tv_sorp_name.setText(thirdEntity.sortName);
ImageLoader.getInstance().displayImage(base_image_url+thirdEntity.categoryImageApp, holder.iv_sorp,options);
return convertView;
}
class ViewHolder{
private ImageView iv_sorp;
private TextView tv_sorp_name;
}
}
发现运行起来GridView只能显示一行,少贴上一个自定义的GridView
package com.example.a123.myapplication;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* Created by 123 on 2017/4/27.
*/
public class MyGridView extends GridView {
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, height);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
}
}
这样就没问题了