Android ExpandableGridView的实现

时间:2023-03-09 15:27:44
Android ExpandableGridView的实现

近期在做项目的时候碰到了这样一个布局

Android ExpandableGridView的实现

在android中有种实现折叠list方式是ExpandableListView  但是官方没有ExpandableGridView

那么怎么样用ExpandableListView来实现一个ExpandableGridView呢

大概的原理是:在每个ExpandableListView 中显示一行,用这行来加载一个GridView

口说无凭,贴上代码

1.加载一个ExpandableListView

private SimpleDataAdapter simpleDataAdapter;
private ExpandableListView mexpandableListview; mexpandableListview = (ExpandableListView) findViewById(R.id.expandablelist);
mSuperAdapter = new SuperveseDataExpandableAdapter(this,mSuperveseData);
mexpandableListview.setAdapter(mSuperAdapter);
mexpandableListview.expandGroup(0);  

  2.重写BaseExpandableListAdapter

重写BaseExpandableListAdapter,主要是重写getChildView方法 加载一个GridView 动态的计算GridView 高度

    @Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = layoutInflater.inflate(R.layout.view, null);
}
CustomGridView gridView = (CustomGridView) convertView .findViewById(R.id.GridView_toolbar); gridView.setNumColumns(2);
gridView.setHorizontalSpacing(10);
gridView.setGravity(Gravity.CENTER);
GridAdapter adapter = new GridAdapter(context, superveseDatas.get(groupPosition).controlDatas);
gridView.setAdapter(adapter);// Adapter int totalHeight = 0;
for (int size = 0; size < adapter.getCount(); size++) {
RelativeLayout relativeLayout = (RelativeLayout) adapter.getView(size, null, gridView);
TextView textView = (TextView) relativeLayout.getChildAt(0);
textView.measure(0, 0);
totalHeight += textView.getMeasuredHeight()*2;
if(size == adapter.getCount() -1){
if (size%2 == 0 ){
totalHeight += textView.getMeasuredHeight()*2;
}
}
}
gridView.SetHeight(totalHeight); return convertView;
}

  另外一个地方也需要注意下:

getChildrenCount返回1 因为用一个Item 来加载GridView
 @Override
public int getChildrenCount(int groupPosition) {
return 1;
}

  

最后实现的效果如下

Android ExpandableGridView的实现