很早之前做过一个商城的app 也是第一次做安卓。

实现的效果如下:

因为一开始做安卓,很多写的代码都不规范,在下面上代码的地方,还请高手指点(勿喷,楼主是自尊心很强的屌丝)

这个效果要解决2个大问题,

第一个是ExpandableListView 如何放置gridview  ,这个比较好做 思路就是adapter里实现

第二个是在ExpandableListView里面展开后,GirdView如何能充满ExpandableListView的item, 就是楼上的效果

好,先来解决第一个。如何放置gridview,

在这里使用的adapter 是BaseExpandableListAdapter  并且实现点击girdview里面item的事件

  1. //适配器
  2. class madapter extends BaseExpandableListAdapter implements OnItemClickListener {
  3. @Override
  4. public int getGroupCount() {
  5. // TODO Auto-generated method stub
  6. return alllist.size();
  7. }
  8. @Override
  9. public int getChildrenCount(int groupPosition) {
  10. return 1;
  11. }
  12. @Override
  13. public Object getGroup(int groupPosition) {
  14. // TODO Auto-generated method stub
  15. return alllist.get(groupPosition).parentnode;
  16. }
  17. @Override
  18. public Object getChild(int groupPosition, int childPosition) {
  19. // TODO Auto-generated method stub
  20. return null;
  21. }
  22. @Override
  23. public long getGroupId(int groupPosition) {
  24. // TODO Auto-generated method stub
  25. return groupPosition;
  26. }
  27. @Override
  28. public long getChildId(int groupPosition, int childPosition) {
  29. // TODO Auto-generated method stub
  30. return childPosition;
  31. }
  32. @Override
  33. public boolean hasStableIds() {
  34. // TODO Auto-generated method stub
  35. return true;
  36. }
  37. @Override
  38. public View getGroupView(int groupPosition, boolean isExpanded,
  39. View convertView, ViewGroup parent) {
  40. TextView text = createView(getGroup(groupPosition).toString(),getContext());
  41. return text;
  42. }
  43. @Override
  44. public View getChildView(int groupPosition, int childPosition,
  45. boolean isLastChild, View convertView, ViewGroup parent) {
  46. layoutInflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  47. ViewGroup item = (ViewGroup)layoutInflater.inflate(R.layout.shops_allshops_type_grid, null); //载入gridview布局
  48. grid  = (ShowAllShopsType_list_grid) item.findViewById(R.id.shopstypegridview);// 获取girdview的节点
  49. grid.setNumColumns(4);// 设置每行列数
  50. grid.setGravity(Gravity.CENTER);// 位置居中
  51. grid.setVerticalSpacing(10);
  52. grid.setAdapter(gridAdapter(parent.getContext(),(int)getGroupId(groupPosition)));
  53. grid.setOnItemClickListener(this);
  54. grid.setVisibility(View.VISIBLE);
  55. return item;
  56. }
  57. @Override
  58. public boolean isChildSelectable(int groupPosition, int childPosition) {
  59. // TODO Auto-generated method stub
  60. return true;
  61. }
  62. @Override
  63. public void onItemClick(AdapterView<?> parent, View view, int position,
  64. long id) {
  65. Intent intent =new Intent(getContext(),ShowAllShops.class);
  66. intent.putExtra("text", ((TextView)view).getText());
  67. //getContext().startActivity(intent);
  68. shopactivty.setResult(1, intent);
  69. shopactivty.finish();
  70. }
  71. }

代码只是提供思路的,详细的哪里不懂可以评论发

第二个问题是gridview的自适应

  1. public class ShowAllShopsType_list_grid extends GridView{
  2. public ShowAllShopsType_list_grid(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. /**
  6. * 设置不滚动
  7. */
  8. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
  9. {
  10. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  11. MeasureSpec.AT_MOST);
  12. super.onMeasure(widthMeasureSpec, expandSpec);
  13. }

这里只是重写了onMeasure 方法,这样的重写 在ScrollView里放置ListView的冲突上面一样可以解决。

ExpandableListView 里面嵌套GridView实现高度自适应的更多相关文章

  1. GridView的高度自适应

    接着上面一篇文章. 当GridView不知道parent高度的时候,也就是MeasureSpec是UNSPECIFIED,这个时候,GridView高度为第一个child的高度,并显示滚动条. mIt ...

  2. flex布局嵌套之高度自适应

    查遍各大资源无任何flex嵌套布局的例子,经过自己折腾完成了项目中的高度自适应需求(更多应用于前端组件) 效果图: html代码:(关键地方已经用颜色特别标识 ^_^) <!DOCTYPE ht ...

  3. android设置GridView高度自适应,实现全屏铺满效果

    使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gr ...

  4. [Swift通天遁地]二、表格表单-(3)在表格中嵌套另一个表格并使Cell的高度自适应

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  5. Android动态设定GridView的高度,固定column,实现高度自适应

    动态设定GridView的高度,固定column,根据gridview中的item个数设定高度: 调用以下方法: public static void setListViewHeightBasedOn ...

  6. Android 让GridView的高度为Wrap_content根据内容自适应高度

    From:http://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/ 如果把Grid ...

  7. android 之 ListView 里面嵌套 GridView 遇到的问题及其解决方法。

    我们直接入主题.所有问题例子请参照下图 1,怎样使图片具有点击事件? 答: 解决方法: 在你的BaseAdapter里面不要设置下面这三个东西,然后再设置GridView的onItemClick. g ...

  8. iframe高度自适应

    前两天在网上看到了一道面试题,问iframe高度自适应的问题.发现自己之前几乎没有关注过iframe的问题,所以在这里记录一下. 原题目是: 页面A的域名是:http://www.taobao.com ...

  9. 里面的div怎么撑开外面的div,让高度自适应

    关于容器高度自适应的兼容性问题.1.有些时候,我们希望容器有一个固定高度,但当其中的内容多的时候,又希望高度能够自适应,也即容器在纵向能被撑开,且如果有背景,也能够自适应.在一般情况下,使用min-h ...

随机推荐

  1. SUSE下FTP服务器搭建

    FTP(File Transfer Protocol),是TCP/IP网络上两台计算机传送文件的协议,是在TCP/IP网络和Internet上最早使用的协议之一,属于网络协议组的应 用层.FTP客户机 ...

  2. linux 共享内存实现

    说起共享内存,一般来说会让人想起下面一些方法:1.多线程.线程之间的内存都是共享的.更确切的说,属于同一进程的线程使用的是同一个地址空间,而不是在不同地址空间之间进行内存共享:2.父子进程间的内存共享 ...

  3. Android图片加载库:最全面的Picasso讲解

    前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...

  4. 【leetcode】 Scramble String (hard)★

    Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrin ...

  5. 对QQ、微信等第三方登录的几个思考

    转自:http://www.jianshu.com/p/7f282dfc16fc 今天聊聊注册.登录环节中很常见的第三方登录,如QQ.微信.支付宝.新浪微博等.虽然这些产品的开放平台都提供了标准的接入 ...

  6. IOS - UIViewController的生命周期

    1)Load周期 2)Unload周期 在UIViewController中,view(黑体的view指的是controller的view属性)有两个循环:加载和卸载循环.当程序的一部分向contro ...

  7. iOS注册collcetionViewFlowLayout

    self.arr = [[NSMutableArray alloc] init]; for (int i = 0; i < 9; i++) { [self.arr addObject:[UIIm ...

  8. [Android] 关于getinstalledpackages参数的分析

    reference to  : http://blog.csdn.net/luojiusan520/article/details/47696891 getinstalledpackages()的方法 ...

  9. 矿场搭建(codevs 1996)

    题目描述 Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使 ...

  10. c语言强制类型转换

    一.强制类型转换 printf("3/2+100.5=%f",3/2+100.5);//100.5错误表达 printf ("    (float)3/(float)2 ...