您当前的位置: 首页 > 

xiangzhihong8

暂无认证

  • 2浏览

    0关注

    1324博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ExpandableListView简单应用及listview模拟ExpandableListView

xiangzhihong8 发布时间:2014-12-18 18:11:08 ,浏览量:2

  首先我们还是来看一些案例,还是拿搜狐新闻客户端,因为我天天上下班没事爱看这个东东,上班又没时间看新闻,上下班路途之余浏览下新闻打发时间嘛.

                          

看这个效果挺棒吧,其实实现起来也不难,我简单说明下.

首先我们用到的控件是:ExpandableListView

布局文件:

[java]  view plain copy
  1.   
  2.   
  3.       
  4.   
  5.       
  6.       
  7.   
  8.   

MyexpandableListAdapter.java

[java]  view plain copy
  1. /*** 
  2.      * 数据源 
  3.      *  
  4.      * @author Administrator 
  5.      *  
  6.      */  
  7.     class MyexpandableListAdapter extends BaseExpandableListAdapter {  
  8.         private Context context;  
  9.         private LayoutInflater inflater;  
  10.   
  11.         public MyexpandableListAdapter(Context context) {  
  12.             this.context = context;  
  13.             inflater = LayoutInflater.from(context);  
  14.         }  
  15.   
  16.         // 返回父列表个数  
  17.         @Override  
  18.         public int getGroupCount() {  
  19.             return groupList.size();  
  20.         }  
  21.   
  22.         // 返回子列表个数  
  23.         @Override  
  24.         public int getChildrenCount(int groupPosition) {  
  25.             return childList.get(groupPosition).size();  
  26.         }  
  27.   
  28.         @Override  
  29.         public Object getGroup(int groupPosition) {  
  30.   
  31.             return groupList.get(groupPosition);  
  32.         }  
  33.   
  34.         @Override  
  35.         public Object getChild(int groupPosition, int childPosition) {  
  36.             return childList.get(groupPosition).get(childPosition);  
  37.         }  
  38.   
  39.         @Override  
  40.         public long getGroupId(int groupPosition) {  
  41.             return groupPosition;  
  42.         }  
  43.   
  44.         @Override  
  45.         public long getChildId(int groupPosition, int childPosition) {  
  46.             return childPosition;  
  47.         }  
  48.   
  49.         @Override  
  50.         public boolean hasStableIds() {  
  51.   
  52.             return true;  
  53.         }  
  54.   
  55.         @Override  
  56.         public View getGroupView(int groupPosition, boolean isExpanded,  
  57.                 View convertView, ViewGroup parent) {  
  58.             GroupHolder groupHolder = null;  
  59.             if (convertView == null) {  
  60.                 groupHolder = new GroupHolder();  
  61.                 convertView = inflater.inflate(R.layout.group, null);  
  62.                 groupHolder.textView = (TextView) convertView  
  63.                         .findViewById(R.id.group);  
  64.                 groupHolder.imageView = (ImageView) convertView  
  65.                         .findViewById(R.id.image);  
  66.                 groupHolder.textView.setTextSize(15);  
  67.                 convertView.setTag(groupHolder);  
  68.             } else {  
  69.                 groupHolder = (GroupHolder) convertView.getTag();  
  70.             }  
  71.   
  72.             groupHolder.textView.setText(getGroup(groupPosition).toString());  
  73.             if (isExpanded)// ture is Expanded or false is not isExpanded  
  74.                 groupHolder.imageView.setImageResource(R.drawable.expanded);  
  75.             else  
  76.                 groupHolder.imageView.setImageResource(R.drawable.collapse);  
  77.             return convertView;  
  78.         }  
  79.   
  80.         @Override  
  81.         public View getChildView(int groupPosition, int childPosition,  
  82.                 boolean isLastChild, View convertView, ViewGroup parent) {  
  83.             if (convertView == null) {  
  84.                 convertView = inflater.inflate(R.layout.item, null);  
  85.             }  
  86.             TextView textView = (TextView) convertView.findViewById(R.id.item);  
  87.             textView.setTextSize(13);  
  88.             textView.setText(getChild(groupPosition, childPosition).toString());  
  89.             return convertView;  
  90.         }  
  91.   
  92.         @Override  
  93.         public boolean isChildSelectable(int groupPosition, int childPosition) {  
  94.             return true;  
  95.         }  
  96.     }  
  97.   
  98.     @Override  
  99.     public boolean onGroupClick(final ExpandableListView parent, final View v,  
  100.             int groupPosition, final long id) {  
  101.   
  102.         return false;  
  103.     }  
上面实现起来比较简单.相信对listview熟悉的朋友看这个一定很熟悉,无外乎就是多了个孩子.

selector_group.xml

[java]  view plain copy
  1.   
  2.   
  3.   
  4.       
  5.       
  6.       
  7.   
  8.   
selector_item.xml  同理.

效果图:

                     

效果虽然丑了点,不过就是这么回事,至于显示group的item,还是孩子的item,你可以随意定制.

   不想敲的同学,可以下载源码,稍作调整.  

   源码下载

/********************************LIstView模拟ExpandableListView**************************************************************/

下面我们接着看一些案例:

               

其实就是:点击listview的一个item,展开其孩子,点击另一个item,打开其孩子,关闭之前那个孩子.

这个眨一看是ExpandableListView这个东东,可是本人比较笨戳,整了好久没有弄出来,最终放弃,google下,发现有人用listview来模拟实现,也就跟着做了下.

布局文件:(后面多个隐藏text.)

[java]  view plain copy
  1.   
  2.   
  3.   
  4.       
  5.   
  6.           
  7.   
  8.           
  9.       
  10.   
  11.       
  12.   
  13.   
MyAdpter.java

[java]  view plain copy
  1. /*** 
  2.      * 数据源 
  3.      *  
  4.      * @author zhangjia 
  5.      *  
  6.      */  
  7.     class MyAdpter extends BaseAdapter {  
  8.         private Context context;  
  9.         private LayoutInflater inflater;  
  10.   
  11.         private int change_index = -1;// 改变项  
  12.   
  13.         public MyAdpter(Context context) {  
  14.             super();  
  15.             this.context = context;  
  16.             inflater = (LayoutInflater) context  
  17.                     .getSystemService(context.LAYOUT_INFLATER_SERVICE);  
  18.         }  
  19.   
  20.         @Override  
  21.         public int getCount() {  
  22.             return groupList.size();  
  23.         }  
  24.   
  25.         @Override  
  26.         public Object getItem(int position) {  
  27.             return groupList.get(position);  
  28.         }  
  29.   
  30.         @Override  
  31.         public long getItemId(int position) {  
  32.             return position;  
  33.         }  
  34.   
  35.         @Override  
  36.         public View getView(int position, View convertView, ViewGroup parent) {  
  37.             GroupHolder groupHolder = null;  
  38.             if (convertView == null) {  
  39.                 groupHolder = new GroupHolder();  
  40.                 convertView = inflater.inflate(R.layout.group, null);  
  41.                 groupHolder.textView = (TextView) convertView  
  42.                         .findViewById(R.id.group);  
  43.                 groupHolder.imageView = (ImageView) convertView  
  44.                         .findViewById(R.id.image);  
  45.                 groupHolder.hint_item = (TextView) convertView  
  46.                         .findViewById(R.id.hint_item);  
  47.                 convertView.setTag(groupHolder);  
  48.             } else {  
  49.                 groupHolder = (GroupHolder) convertView.getTag();  
  50.             }  
  51.             groupHolder.textView.setText(groupList.get(position));  
  52.             groupHolder.hint_item.setText(childList.get(position));  
  53.             if (change_index == position)  
  54.                 groupHolder.hint_item.setVisibility(View.VISIBLE);  
  55.             else  
  56.                 groupHolder.hint_item.setVisibility(View.GONE);  
  57.   
  58.             return convertView;  
  59.         }  
  60.   
  61.         /*** 
  62.          * 这个方法用于更改子item的状态 
  63.          */  
  64.         public void changeImageVisable(View view, int position) {  
  65.             // 隐藏提示  
  66.             if (change_index == position) {  
  67.                 GroupHolder groupHolder = (GroupHolder) view.getTag();  
  68.                 if (groupHolder.hint_item.getVisibility() == View.VISIBLE)  
  69.                     groupHolder.hint_item.setVisibility(View.GONE);  
  70.                 else  
  71.                     groupHolder.hint_item.setVisibility(View.VISIBLE);  
  72.   
  73.             } else {  
  74.                 change_index = position;  
  75.                 notifyDataSetChanged();// restart getview  
  76.             }  
  77.   
  78.         }  
  79.     }  
这个数据源很简单,只是多了个用于控制孩子隐藏与显示的方法changeImageVisable.代码很简单,相信不用过多解释.

效果:

                      

上面模拟显示的孩子是一个textview(缺点:隐藏textview显示时候点击会影响到其父控件,大家尝试一下,不过肯定有解决办法的.),

下面我来介绍下,如果孩子是listview应该怎么办.

首先配置文件:

[java]  view plain copy
  1.   
  2.   
  3.   
  4.   
  5.       
  6.   
  7.           
  8.   
  9.           
  10.       
  11.   
  12.       
  13.   
  14.   
[java]  view plain copy
  1. /*** 
  2.  * InitData 
  3.  */  
  4. void InitData() {  
  5.     groupList = new ArrayList();  
  6.     groupList.add("Ios");  
  7.     groupList.add("Android");  
  8.     groupList.add("Window");  
  9.     childList = new ArrayList();  
  10.     for (int i = 0; i 
关注
打赏
1482932726
查看更多评论
立即登录/注册

微信扫码登录

0.0902s