標籤:
近期在做項目的時候碰到了這樣一個布局
在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的實現