Android ExpandableListView 可展开的ListView

效果图

 

[java] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. public class TestExpandableListView extends Activity {  
  2.     ExpandableListView mView;  
  3.     @Override  
  4.     protected void onCreate(Bundle savedInstanceState) {  
  5.         super.onCreate(savedInstanceState);  
  6.         setContentView(R.layout.expandable_listview);  
  7.           
  8.         mView = (ExpandableListView) findViewById(R.id.el_list);  
  9.         mView.setAdapter(new MyAdapter());  
  10.           
  11.     }  
  12.       
  13.     class MyAdapter extends BaseExpandableListAdapter {  
  14.           
  15.          //设置组视图的图片  
  16. //        int[] logos = new int[] { R.drawable.wei, R.drawable.shu,R.drawable.wu};  
  17.         //设置组视图的显示文字  
  18.         private String[] generalsTypes = new String[] { "魏", "蜀", "吴" };  
  19.         //子视图显示文字  
  20.         private String[][] generals = new String[][] {  
  21.                 { "夏侯惇", "甄姬", "许褚", "郭嘉", "司马懿", "杨修" },  
  22.                 { "马超", "张飞", "刘备", "诸葛亮", "黄月英", "赵云" },  
  23.                 { "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" }  
  24.   
  25.         };  
  26.           
  27.         //子视图图片  
  28. //        public int[][] generallogos = new int[][] {  
  29. //                { R.drawable.xiahoudun, R.drawable.zhenji,  
  30. //                        R.drawable.xuchu, R.drawable.guojia,  
  31. //                        R.drawable.simayi, R.drawable.yangxiu },  
  32. //                { R.drawable.machao, R.drawable.zhangfei,  
  33. //                        R.drawable.liubei, R.drawable.zhugeliang,  
  34. //                        R.drawable.huangyueying, R.drawable.zhaoyun },  
  35. //                { R.drawable.lvmeng, R.drawable.luxun, R.drawable.sunquan,  
  36. //                        R.drawable.zhouyu, R.drawable.sunshangxiang } };  
  37.   
  38.         //自己定义一个获得textview的方法  
  39.         TextView getTextView() {  
  40.             AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 100);  
  41.             TextView textView = new TextView(TestExpandableListView.this);  
  42.             textView.setLayoutParams(lp);  
  43.             textView.setGravity(Gravity.CENTER_VERTICAL);  
  44.             textView.setPadding(36, 0, 0, 0);  
  45.             textView.setTextSize(20);  
  46.             textView.setTextColor(Color.BLACK);  
  47.             return textView;  
  48.         }  
  49.   
  50.   
  51.         @Override  
  52.         public int getGroupCount() {  
  53.             return generalsTypes.length;  
  54.         }  
  55.   
  56.         @Override  
  57.         public int getChildrenCount(int groupPosition) {  
  58.             return generals[groupPosition].length;  
  59.         }  
  60.   
  61.         @Override  
  62.         public Object getGroup(int groupPosition) {  
  63.             return generalsTypes[groupPosition];  
  64.         }  
  65.   
  66.         @Override  
  67.         public Object getChild(int groupPosition, int childPosition) {  
  68.             return generals[groupPosition][childPosition];  
  69.         }  
  70.   
  71.         @Override  
  72.         public long getGroupId(int groupPosition) {  
  73.             return groupPosition;  
  74.         }  
  75.   
  76.         @Override  
  77.         public long getChildId(int groupPosition, int childPosition) {  
  78.             return childPosition;  
  79.         }  
  80.   
  81.         @Override  
  82.         public boolean hasStableIds() {  
  83.             return true;  
  84.         }  
  85.   
  86.         @Override  
  87.         public View getGroupView(int groupPosition, boolean isExpanded,  
  88.                 View convertView, ViewGroup parent) {  
  89.              LinearLayout ll = new LinearLayout(TestExpandableListView.this);  
  90.              ll.setOrientation(0);  
  91. //             ImageView logo = new ImageView(ExpandableList.this);  
  92. //             logo.setImageResource(logos[groupPosition]);  
  93. //             logo.setPadding(50, 0, 0, 0);  
  94. //             ll.addView(logo);  
  95.              TextView textView = getTextView();  
  96.              textView.setTextColor(Color.BLUE);  
  97.              textView.setText(getGroup(groupPosition).toString());  
  98.              ll.addView(textView);  
  99.              ll.setPadding(100, 10, 10, 10);  
  100.              return ll;  
  101.         }  
  102.   
  103.         @Override  
  104.         public View getChildView(int groupPosition, int childPosition,  
  105.                 boolean isLastChild, View convertView, ViewGroup parent) {  
  106.              LinearLayout ll = new LinearLayout(TestExpandableListView.this);  
  107.              ll.setOrientation(0);  
  108. //             ImageView generallogo = new ImageView(TestExpandableListView.this);  
  109. //             generallogo.setImageResource(generallogos[groupPosition][childPosition]);  
  110. //             ll.addView(generallogo);  
  111.              TextView textView = getTextView();  
  112.              textView.setText(getChild(groupPosition, childPosition).toString());  
  113.              ll.addView(textView);  
  114.              return ll;  
  115.         }  
  116.   
  117.         @Override  
  118.         public boolean isChildSelectable(int groupPosition, int childPosition) {  
  119.             return true;  
  120.         }  
  121.           
  122.     }  
  123. }  

 

expandable_listview.xml

 

[html] view plain copy
 
 print?在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.     <ExpandableListView   
  7.         android:id="@+id/el_list"  
  8.         android:layout_width="fill_parent"  
  9.         android:layout_height="fill_parent"  
  10.         android:background="#ffffff"  
  11.         android:cacheColorHint="#abcdefff"  
  12.         android:listSelector="#cdefabdc"   
  13.         >  
  14.   <!--       android:cacheColorHint="#00000000",这个设置拖动view时背景色  
  15.         android:listSelector="#00000000" ,设置选中时的底色 -->  
  16.     </ExpandableListView>   
  17. </LinearLayout>  

 

 

一些方法说明:

1.  ExpandableListAdapter 

     group和child都有getView方法,即可使用不同的布局,ViewHolder等

     在getView方法的,groupPosition和childPosition 即在两个集合中的位置

2. ExpandableListView 

    getFirstVisiblePosition();
    getLastVisiblePosition();   //返回屏幕最后可见item的位置: 只计算可见view的位置(不含被group 收缩的子view)

   getPackedPositionGroup(getExpandableListPosition(getFirstVisiblePosition()); //返回 首可见项所在group位置

   setOnChildClickListener()   child点击
   setOnGroupClickListener()  group点击

posted @ 2016-11-28 18:33  天涯海角路  阅读(107)  评论(0)    收藏  举报