ExpandableListView 里面嵌套GridView实现高度自适应

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

实现的效果如下:

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

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

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

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

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

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

Java代码  

  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的自适应

Java代码  

  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的冲突上面一样可以解决。

时间: 2024-10-12 03:49:12

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

ScrollView嵌套ListView,ListView高度自适应

之前做过一个项目,是ScrollView包含GridView和ListView,其中ListView和GridView无法自适应高度,研究了一下,需要重写onMeasure方法,ListView和GridView一样,废话不多说看源码: import android.content.Context;import android.util.AttributeSet;import android.widget.ListView; public class AdaptiveListView exten

GridView的高度自适应

接着上面一篇文章. 当GridView不知道parent高度的时候,也就是MeasureSpec是UNSPECIFIED,这个时候,GridView高度为第一个child的高度,并显示滚动条. 1 mItemCount = mAdapter == null ? 0 : mAdapter.getCount(); 2 final int count = mItemCount; 3 if (count > 0) { 4 final View child = obtainView(0, mIsScrap

iframe的跨域高度自适应(通过跨域页面中嵌套本域页面)

实习不久接到一个任务,在网页中嵌套另一个工程的网页.本以为这是轻而易举的一件事情,结果被测试姐姐折腾得够呛.多次和我谈心说到这个高度固定导致iframe出现滚动条有多么不好看,对于工程整体的影响有多么恶劣.因为跨域的原因,这个需求被拖了许久,真是很痛苦的一件事.最终在我离开公司之前搞定了这个单. 这里就把我的研究过程写下来以供大家参考. 首先需要了解一下何为同域,何为跨域: URL 说明 是否允许通信 http://www.a.com/a.jshttp://www.a.com/b.js 同一域名

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

From:http://www.jayway.com/2012/10/04/how-to-make-the-height-of-a-gridview-wrap-its-content/ 如果把GridView放到一个垂直方向滚动的布局中,设置其高度属性为 wrap_content ,则该GridView的高度只有一行内容,其他内容通过滚动来显示. 如果你想让该GridView的高度为所有行内容所占用的实际高度,则可以通过覆写GridView的 onMeasure 函数来修改布局参数: packa

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

使GridView每个item的高度自适应拉伸,达到整个GridView刚好铺满全屏的效果. public static void setGridViewMatchParent(GridView gridView ) { // 获取gridView的adapter ListAdapter adapter = gridView.getAdapter(); if (adapter == null) { return; } // 固定列宽,有多少列 int col = 2;// gridView.ge

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

本文将演示如何在表格中嵌套另一个表格并使Cell的高度自适应,创建更加强大的布局效果. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Cocoa Touch Class]->[Next]-> [Class]:CustomizeUITableViewCell ,类名. [Subclass of]:UITableViewCell ,父类 [Language]:Swift ->[Next]->[Create]在项目导航区,打开刚刚创建的代码

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

动态设定GridView的高度,固定column,根据gridview中的item个数设定高度: 调用以下方法: [java] view plaincopy public static void setListViewHeightBasedOnChildren(GridView listView) { // 获取listview的adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) {

GridView中item高度自适应

public class MyAdapter extends BaseAdapter {         GridView mGv;        public static int ROW_NUMBER = 5;     public MyAdapter (GridView gv, Context mContext, ArrayList<String> list) {         this.context = mContext;         this.mGv = gv;       

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

动态设定GridView的高度,固定column,根据gridview中的item个数设定高度: 调用以下方法: public static void setListViewHeightBasedOnChildren(GridView listView) { // 获取listview的adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } // 固定列宽,有多少列