很早之前做過一個商城的app 也是第一次做安卓。
實現的效果如下:
因為一開始做安卓,很多寫的代碼都不規范,在下面上代碼的地方,還請高手指點(勿噴,樓主是自尊心很強的屌絲)
這個效果要解決2個大問題,
第一個是ExpandableListView 如何放置gridview ,這個比較好做 思路就是adapter里實現
第二個是在ExpandableListView里面展開后,GirdView如何能充滿ExpandableListView的item, 就是樓上的效果
好,先來解決第一個。如何放置gridview,
在這里使用的adapter 是BaseExpandableListAdapter 並且實現點擊girdview里面item的事件
- //適配器
- class madapter extends BaseExpandableListAdapter implements OnItemClickListener {
- @Override
- public int getGroupCount() {
- // TODO Auto-generated method stub
- return alllist.size();
- }
- @Override
- public int getChildrenCount(int groupPosition) {
- return 1;
- }
- @Override
- public Object getGroup(int groupPosition) {
- // TODO Auto-generated method stub
- return alllist.get(groupPosition).parentnode;
- }
- @Override
- public Object getChild(int groupPosition, int childPosition) {
- // TODO Auto-generated method stub
- return null;
- }
- @Override
- public long getGroupId(int groupPosition) {
- // TODO Auto-generated method stub
- return groupPosition;
- }
- @Override
- public long getChildId(int groupPosition, int childPosition) {
- // TODO Auto-generated method stub
- return childPosition;
- }
- @Override
- public boolean hasStableIds() {
- // TODO Auto-generated method stub
- return true;
- }
- @Override
- public View getGroupView(int groupPosition, boolean isExpanded,
- View convertView, ViewGroup parent) {
- TextView text = createView(getGroup(groupPosition).toString(),getContext());
- return text;
- }
- @Override
- public View getChildView(int groupPosition, int childPosition,
- boolean isLastChild, View convertView, ViewGroup parent) {
- layoutInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- ViewGroup item = (ViewGroup)layoutInflater.inflate(R.layout.shops_allshops_type_grid, null); //載入gridview布局
- grid = (ShowAllShopsType_list_grid) item.findViewById(R.id.shopstypegridview);// 獲取girdview的節點
- grid.setNumColumns(4);// 設置每行列數
- grid.setGravity(Gravity.CENTER);// 位置居中
- grid.setVerticalSpacing(10);
- grid.setAdapter(gridAdapter(parent.getContext(),(int)getGroupId(groupPosition)));
- grid.setOnItemClickListener(this);
- grid.setVisibility(View.VISIBLE);
- return item;
- }
- @Override
- public boolean isChildSelectable(int groupPosition, int childPosition) {
- // TODO Auto-generated method stub
- return true;
- }
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position,
- long id) {
- Intent intent =new Intent(getContext(),ShowAllShops.class);
- intent.putExtra("text", ((TextView)view).getText());
- //getContext().startActivity(intent);
- shopactivty.setResult(1, intent);
- shopactivty.finish();
- }
- }
代碼只是提供思路的,詳細的哪里不懂可以評論發
第二個問題是gridview的自適應
- public class ShowAllShopsType_list_grid extends GridView{
- public ShowAllShopsType_list_grid(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
- /**
- * 設置不滾動
- */
- public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
- int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
- MeasureSpec.AT_MOST);
- super.onMeasure(widthMeasureSpec, expandSpec);
- }
這里只是重寫了onMeasure 方法,這樣的重寫 在ScrollView里放置ListView的沖突上面一樣可以解決。