站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展

距离上次更新博客,时隔略长,诸事繁琐,赶在去广州答辩之前,分享下安卓 android 中的一个 列表收缩 类---ExpandableListView

先上效果图:

如果想直接看实现此页面的代码请下滑到 红线 下

关于这个类的具体各函数的使用说明,这里不作详细说明,提供一个链接http://www.apkbus.com/android-124715-1-1.html,里面有关于此类的详细介绍。

我在这里主要通过源代码的注释和必要的说明,说明如何实现自定义的收缩列表。

必要的函数:

0->

1 ExpandableListView expandListView = (ExpandableListView) this.findViewById(R.id.ecpandable);
2 expandListView.setGroupIndicator(null);//去掉默认的下指箭头
3 expandListView.setDivider(null);//去掉下行线

      1->

1 @Override
2             public int getGroupCount() {
3 //用于返回大标题的数目,例如我上面的图片,共有7个大标题
4                 return armTypes.length;
5 //armTypes 是用来存放大标题的数组,自定义
6             }

    2->

1 @Override
2             public int getChildrenCount(int groupPosition) {
3 //用来返回一个大标题内的字标签数目,传入参数 groupPosition为当前
4 //大标题的下标,从0开始
5                 return arms_two[groupPosition].length;
6 //arms_two 是自定义的,存放子标签的 二维 数组
7             }
//对应上面,这个二维字符串数组共有 7 行,每行对应一个大标签
//每行的列数是子标签数,对应当前大标签,有多少个就是有多少个孩子
private String[][] arms_two = new String[][]{   //
                    {"班车列表(30分钟/班)","清记甜品","石头城","贝壳屋",}, //0~--
                    {"小a","清记甜品","石头城","贝壳屋",},
                    {"小c","清记甜品","石头城","贝壳屋","羊肉丁",},
                    {"小d",},
                    {"小e",},
                    {"小f",},
                    {"小aa",},
            };

      3->

//返回当前的大标签数目,对应上面的 getGroupCount 函数,传入的是谁
// 返回的就是对应谁的数目,上面是armTypes,那么就是它的数目
@Override
            public long getGroupId(int groupPosition) {
                return groupPosition; //注意,它是从0下标开始的
            }

     4->

//返回对应的每个大标签的 子标签数目,传入的 groupPosition 是当前的大
//标签下标,.length 就是当前行的列数
@Override
            public int getChildrenCount(int groupPosition) {
                return arms_two[groupPosition].length;
            }

     5->

@Override
  public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
   //返回大标签对应的 布局 视图,可以纯代码,也可以使用 xml 布局文件
  //使用 xml 布局文件例子
   RelativeLayout group = (RelativeLayout) RelativeLayout.inflate(getBaseContext(), R.layout.extend_group, null);
   return group;
}

     6->

@Override
   public View getChildView(int groupPosition, int childPosition, boolean isLastChild,View convertView, ViewGroup parent) {
  // 返回 子标签显示的 布局 视图,可以纯 代码,也可以 使用xml 布局文件
  //xml 布局例子
    LinearLayout child = (LinearLayout) LinearLayout.inflate(getBaseContext(), R.layout.extend_child, null);
  //建议使用listView
    return child;
}

----------------------------------*********必要的函数分析完毕*********--------------------------------------

----------------------------------现在上实现我上述图片的代码

主父布局

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     <FrameLayout
 7         android:layout_width="fill_parent"
 8         android:layout_height="50dp"
 9         android:background="#ff19a9f8"
10         >
11         <Button
12             android:layout_marginLeft="5dp"
13             android:layout_width="30dp"
14             android:layout_height="25dp"
15             android:id="@+id/back"
16             android:background="@drawable/back"
17             android:layout_gravity="left|center_vertical"/>
18         <TextView
19             android:layout_gravity="center"
20             android:layout_width="wrap_content"
21             android:layout_height="wrap_content"
22             android:text="路灯"
23             android:textSize="20sp"
24             android:textColor="#000000"
25             />
26     </FrameLayout>
27     <TextView
28         android:alpha="0.6"
29         android:textColor="#ff19a9f8"
30         android:layout_marginTop="10dp"
31         android:layout_gravity="center"
32         android:id="@+id/guild"
33         android:textSize="20dp"
34         android:text="私人路线推荐"
35         android:layout_width="wrap_content"
36         android:layout_height="wrap_content"
37         />
38     <ExpandableListView
39         android:layout_marginTop="5dp"
40         android:layout_width="fill_parent"
41         android:layout_height="wrap_content"
42         android:id="@+id/ecpandable"
43         />
44
45 </LinearLayout>

group 布局

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 4     android:orientation="vertical"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent">
 7
 8
 9
10    <ImageView
11
12        android:layout_marginLeft="@dimen/extend_x_left"
13        android:id="@+id/entend_x"
14        android:background="@drawable/extend_x"
15        android:layout_width="wrap_content"
16        android:layout_height="wrap_content" />
17     <TextView
18         android:alpha="0.8"
19         android:id="@+id/time_coustom"
20         android:layout_marginLeft="20dp"
21         android:text="1:00pm"
22         android:textSize="17dp"
23         android:layout_width="wrap_content"
24         android:layout_height="wrap_content"
25         android:layout_toRightOf="@+id/entend_x"
26         />
27     <ImageView
28         android:id="@+id/entend_line"
29         android:layout_marginLeft="5dp"
30         android:background="@drawable/extend_line"
31         android:layout_width="wrap_content"
32         android:layout_height="wrap_content"
33         android:layout_toRightOf="@+id/time_coustom"
34         />
35     <TextView
36         android:id="@+id/loca_name"
37         android:textSize="17dp"
38         android:text="北理乘车"
39         android:layout_width="wrap_content"
40         android:layout_height="wrap_content"
41         android:layout_toRightOf="@+id/entend_line"
42         />
43     <ImageView
44         android:id="@+id/down"
45         android:layout_marginTop="10dp"
46         android:layout_marginRight="10dp"
47         android:layout_alignParentRight="true"
48         android:background="@drawable/right"
49         android:layout_width="15dp"
50         android:layout_height="15dp" />
51 </RelativeLayout>

子标签布局

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView
            android:layout_marginLeft="@dimen/extend_x_left"
            android:id="@+id/entend_chile_x"
            android:background="@drawable/extend_line"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent" />
        <LinearLayout
            android:layout_marginLeft="40dp"
            android:orientation="vertical"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <LinearLayout
                android:orientation="horizontal"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">
                <TextView
                    android:id="@+id/top"
                    android:textColor="#fff60807"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />
                <TextView
                    android:layout_marginLeft="10dp"
                    android:id="@+id/top_info"
                    android:text="班车列表(30分钟/班)"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content" />

            </LinearLayout>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

主页面 java 代码

  1 package com.LGH.weixin;
  2
  3
  4 import android.app.Activity;
  5 import android.os.Bundle;
  6 import android.view.View;
  7 import android.view.ViewGroup;
  8 import android.widget.AbsListView;
  9 import android.widget.BaseExpandableListAdapter;
 10 import android.widget.ExpandableListAdapter;
 11 import android.widget.ExpandableListView;
 12 import android.widget.ImageView;
 13 import android.widget.LinearLayout;
 14 import android.widget.RelativeLayout;
 15 import android.widget.TextView;
 16
 17 import static com.LGH.weixin.R.id.time_coustom;
 18
 19 /**
 20  * updated by LinGuanHong on 2015.5.21
 21  */
 22
 23 public class extendList extends Activity{
 24
 25     private TextView time_custom;
 26     private TextView top_left;
 27     private TextView top_info;
 28     //贴士
 29     private TextView tips;
 30     private TextView tips_info;
 31     private TextView tips1;
 32     private TextView tips_info1;
 33     private TextView tips2;
 34     private TextView tips_info2;
 35     //特色
 36     private TextView exp;
 37     private TextView exp_info;
 38     private TextView exp1;
 39     private TextView exp_info1;
 40     private TextView exp2;
 41     private TextView exp_info2;
 42     //路上
 43     private TextView way;
 44     private TextView way_info;
 45     private TextView way1;
 46     private TextView way_info1;
 47     private TextView way2;
 48     private TextView way_info2;
 49     //推荐
 50     private TextView push;
 51     private TextView push_info;
 52     private TextView push1;
 53     private TextView push_info1;
 54     private TextView push2;
 55     private TextView push_info2;
 56
 57     //linearLayout
 58     LinearLayout[] way_linear = new LinearLayout[3];
 59     LinearLayout[] exp_linear = new LinearLayout[3];
 60     LinearLayout[] push_linear = new LinearLayout[3];
 61     //LinearLayout push2_linear = new LinearLayout(extendList.this);
 62
 63     LinearLayout child ;
 64
 65     private TextView loca_name;
 66     private ImageView down;
 67
 68     @Override
 69     protected void onCreate(Bundle savedInstanceState) {
 70         // TODO Auto-generated method stub
 71         super.onCreate(savedInstanceState);
 72         setContentView(R.layout.el_main);
 73
 74         /**BaseExpandableListAdapter实现了ExpandableListAdapter*/
 75         ExpandableListAdapter adapter = new BaseExpandableListAdapter(){
 76
 77
 78             /**----------定义数组-------------------------------------------------------------------*/
 79             private String JianGe = "         ";
 80             private int[] images = new int[]{//子列表文字左边对应的图片
 81                     R.drawable.ic_launcher,
 82                     R.drawable.right,
 83                     R.drawable.show
 84             };
 85             private String[] time = new String[]{
 86                     "1:00pm","1:30pm","4:30pm","5:10pm","6:10pm",
 87                     "7:00pm","7:30pm"
 88             };
 89             private String[] armTypes = new String[]{
 90                     "北理乘车","华发商都","名人雕塑园","杨氏大祠堂","津滋味馆",
 91                     "普陀寺","返回北理"
 92             };
 93             private String[] top = new String[]{"贴士:","路上:","特色:","推荐:",};
 94
 95             private String[][] arms_two = new String[][]{   //
 96                     {"班车列表(30分钟/班)","清记甜品","石头城","贝壳屋",}, //0~--
 97                     {"小a","清记甜品","石头城","贝壳屋",},
 98                     {"小c","清记甜品","石头城","贝壳屋","羊肉丁",},
 99                     {"小d",},
100                     {"小e",},
101                     {"小f",},
102                     {"小aa",},
103             };
104
105             private String[][] arms = new String[][]{   //tips 数组---------------------------------------------------
106                     {"班车列表(30分钟/班)",}, //0~--
107                     {"小a",},
108                     {"小c",},
109                     {"小d",},
110                     {"小e",},
111                     {"小f",},
112                     {"小aa",},
113             };
114             private String[][] arms_way = new String[][]{
115                     {"清记甜品","石头城","贝壳屋","羊肉丁",},
116                     {"清记甜品",},
117                     {"小aa",},
118                     {"小cc",},
119                     {"小ss",},
120                     {"小da",},
121                     {"小xxx",},
122             };
123             private String[][] arms_exp = new String[][]{
124                     {"羊肉丁"},
125                     {"小x",},
126                     {"小xx",},
127                     {"小g",},
128                     {"小gg",},
129                     {"小asa",},
130                     {"小wc",},
131             };
132             private String[][] arms_push = new String[][]{
133                     {"甜味滋"},
134                     {"小m",},
135                     {"a",},
136                     {"s",},
137                     {"ddd",},
138                     {"aa",},
139                     {"xxxx",},
140             };
141
142 /*===========组元素表示可折叠的列表项,子元素表示列表项展开后看到的多个子元素项=============*/
143
144             /**----------得到armTypes和arms中每一个元素的ID-------------------------------------------*/
145
146             //获取组在给定的位置编号,即armTypes中元素的ID
147             @Override
148             public long getGroupId(int groupPosition) {
149                 return groupPosition; //从0下标开始
150             }
151
152             //获取在给定的组的儿童的ID,就是arms中元素的ID
153             @Override
154             public long getChildId(int groupPosition, int childPosition) {
155                 return childPosition;
156             }
157
158             /**----------根据上面得到的ID的值,来得到armTypes、arms中元素的个数 ------------------------*/
159
160             //获取的群体数量,得到armTypes里元素的个数
161             @Override
162             public int getGroupCount() {
163                 return armTypes.length;
164             }
165
166             //取得指定组中的儿童人数,就是arms_two中个数
167             @Override
168             public int getChildrenCount(int groupPosition) {
169                 return arms_two[groupPosition].length;
170             }
171
172             /**----------利用上面getGroupId得到ID,从而根据ID得到armTypes中的数据,并填到TextView中 -----*/
173
174             //获取与给定的组相关的数据,得到数组armTypes中元素的数据
175             @Override
176             public Object getGroup(int groupPosition) {
177                 return armTypes[groupPosition]; //这里返回字符对象
178             }
179             public String getCoustomText(int groupPosition){ //自定义文本输出
180                 return time[groupPosition];
181             }
182
183             //获取一个视图显示给定组,存放armTypes
184             @Override
185             public View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {
186                 RelativeLayout group = (RelativeLayout) RelativeLayout.inflate(getBaseContext(), R.layout.extend_group, null);
187
188                 time_custom = (TextView) group.findViewById(time_coustom);
189                 loca_name = (TextView) group.findViewById(R.id.loca_name);
190                 down = (ImageView) group.findViewById(R.id.down);
191                 time_custom.setText(getCoustomText(groupPosition)); //不加 group 会蹦,会爆 nullPoint...
192                 loca_name.setText(getGroup(groupPosition).toString());
193
194                 return group;
195             }
196
197             /**----------利用上面getChildId得到ID,从而根据ID得到arms中的数据,并填到TextView中---------*/
198
199             //获取与孩子在给定的组相关的数据,得到数组arms中元素的数据
200             @Override
201             public Object getChild(int groupPosition, int childPosition) {
202                 return arms[groupPosition][childPosition];
203             }
204
205             //获取一个视图显示在给定的组 的儿童的数据,就是存放arms
206             @Override
207             public View getChildView(int groupPosition, int childPosition, boolean isLastChild,View convertView, ViewGroup parent) {
208                 //从布局文件中加载View
209                 down.setBackground(getResources().getDrawable(R.drawable.show));
210                 //child = (LinearLayout) LinearLayout.inflate(getBaseContext(), R.layout.extend, null);//放外面会造成 单一性
211                 child = (LinearLayout) LinearLayout.inflate(getBaseContext(), R.layout.extend_child, null);//第二种方案
212                 LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 0); //设置高为0,达到隐藏的目的
213
214                 //init();
215                 init_two();
216                 if(childPosition==0) { //如果存在两行,那么第二行的设置如下 if 体
217                     top_left.setText(top[0]);//贴士固定有
218                     top_info.setText(arms_two[groupPosition][0]);//第一个总是 tips的信息
219                 }
220                 if(childPosition==1) { //如果存在两行,那么第二行的设置如下 if 体
221                     top_left.setText(top[1]);
222                     top_info.setText(arms_two[groupPosition][1]);
223                 }
224
225                 if(childPosition==2) { //如果存在3行,那么第二行的设置如下 if 体
226                     top_left.setText(JianGe);
227                     top_info.setText(arms_two[groupPosition][2]);
228                 }
229
230                 if(childPosition==3){ //证明路上有2个,这是第三行的设置
231                     top_left.setText(JianGe);//左边空格
232                     top_info.setText(arms_two[groupPosition][3]);
233                 }
234
235                 if(childPosition==4){ //证明路上有3个,这是第4行的设置
236                     top_left.setTextColor(getResources().getColor(R.color.underLine)); //改变颜色
237                     top_left.setText(top[2]);//左边空格
238                     top_info.setText(arms_two[groupPosition][4]);
239                 }
240
241                 if(childPosition==5){  //这里是第五行,此时这是 特色
242                     top_left.setText(JianGe);//左边空格
243                     top_info.setText(arms_two[groupPosition][5]);
244                 }
245
246                 if(childPosition==6){
247                     top_left.setText(JianGe);//左边空格
248                     top_info.setText(arms_two[groupPosition][6]);
249                 }
250
251                 if(childPosition==7){
252                     top_left.setTextColor(getResources().getColor(R.color.underLine)); //改变颜色
253                     top_left.setText(top[3]);//左边空格
254                     top_info.setText(arms_two[groupPosition][7]);
255                 }
256
257                 if(childPosition==8){ //推荐开始
258                     top_left.setText(JianGe);//左边空格
259                     top_info.setText(arms_two[groupPosition][8]);
260                 }
261
262                 if(childPosition==9){ //推荐开始 2
263                     top_left.setText(JianGe);//左边空格
264                     top_info.setText(arms_two[groupPosition][9]);
265                 }
266
267
268
269                 //具体操作
270                 /*tips.setText(top[0]); //第一个贴士固定不变
271                 tips_info.setText(arms[groupPosition][0]); //目前只显示一条 tips,故列下标是 0
272                 LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, 0); //设置高为0,达到隐藏的目的
273                 if(groupPosition>=0){
274                     //way 路上设置;
275                     way.setText(top[1]);
276                     if( arms_way[groupPosition].length ==1){//只有1列
277                         way_info.setText(arms_way[groupPosition][0]);
278                         way_linear[1].setLayoutParams(layoutParams);
279                         way_linear[2].setLayoutParams(layoutParams);
280                     }
281                     if( arms_way[groupPosition].length ==2){//最多3 列
282                         way1.setText(JianGe);
283                         way_info.setText(arms_way[groupPosition][0]);
284                         way_info1.setText(arms_way[groupPosition][1]);
285                         way_linear[2].setLayoutParams(layoutParams);
286                     }
287                     if( arms_way[groupPosition].length ==3){
288                         way1.setText(JianGe);
289                         way2.setText(JianGe);
290                         way_info.setText(arms_way[groupPosition][0]);
291                         way_info1.setText(arms_way[groupPosition][1]);
292                         way_info2.setText(arms_way[groupPosition][2]);
293                     }
294                 }
295
296                 // 特色设置
297                 if(groupPosition>=0){
298
299                     exp.setText(top[2]);
300                     if( arms_exp[groupPosition].length ==1){//只有1列
301                         exp_info.setText(arms_exp[groupPosition][0]);
302                         exp_linear[1].setLayoutParams(layoutParams);
303                         exp_linear[2].setLayoutParams(layoutParams);
304                     }
305                     if( arms_exp[groupPosition].length ==2){//只有2列
306                         exp1.setText(JianGe);
307                         exp_info.setText(arms_exp[groupPosition][0]);
308                         exp_info.setText(arms_exp[groupPosition][1]);
309                         exp_linear[2].setLayoutParams(layoutParams);
310                     }
311                     if( arms_exp[groupPosition].length ==3){//只有3列
312                         exp1.setText(JianGe);
313                         exp2.setText(JianGe);
314                         exp_info.setText(arms_exp[groupPosition][0]);
315                         exp_info.setText(arms_exp[groupPosition][1]);
316                         exp_info.setText(arms_exp[groupPosition][2]);
317                     }
318                 }
319
320                 // 推荐设置
321                 if(groupPosition>=0){
322
323                     push.setText(top[3]);
324                     if( arms_push[groupPosition].length ==1){//只有1列
325                         push_info.setText(arms_push[groupPosition][0]);
326                         push_linear[1].setLayoutParams(layoutParams);
327                         push_linear[2].setLayoutParams(layoutParams);
328                     }
329                     if( arms_push[groupPosition].length ==2){//只有1列
330                         push1.setText(JianGe);
331                         push_info.setText(arms_push[groupPosition][0]);
332                         push_info.setText(arms_push[groupPosition][1]);
333                         push_linear[2].setLayoutParams(layoutParams);
334                     }
335                     if( arms_push[groupPosition].length ==3){//只有1列
336                         push1.setText(JianGe);
337                         push2.setText(JianGe);
338                         push_info.setText(arms_push[groupPosition][0]);
339                         push_info.setText(arms_push[groupPosition][1]);
340                         push_info.setText(arms_push[groupPosition][2]);
341                     }
342                 }*/
343
344                // Toast.makeText(extendList.this, groupPosition+ "---", Toast.LENGTH_LONG).show();
345                /* LinearLayout ll = new LinearLayout(extendList.this);
346                 ll.setOrientation(LinearLayout.HORIZONTAL);//定义为纵向排列
347                 ImageView logo = new ImageView(extendList.this);
348                 logo.setImageResource(images[groupPosition]);//添加图片
349                 ll.addView(logo);
350                 TextView textView = getTextView();//调用定义的getTextView()方法
351                 textView.setText(getChild(groupPosition,childPosition).toString());//添加数据
352                 ll.addView(textView);*/
353                 return child;
354             }
355
356             /**------------------自定义一个设定TextView属性的方法----------------------------------------------*/
357
358             //定义一个TextView
359             private TextView getTextView(){
360                 AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,40);
361                 TextView textView = new TextView(extendList.this);
362                 textView.setLayoutParams(lp);
363                 textView.setTextSize(20);
364                 return textView;
365             }
366
367             /**-------------------其他设置-------------------------------------------------------------------*/
368
369             //孩子在指定的位置是可选的,即:arms中的元素是可点击的
370             @Override
371             public boolean isChildSelectable(int groupPosition,int childPosition) {
372                 return true;
373             }
374
375             //表示孩子是否和组ID是跨基础数据的更改稳定
376             public boolean hasStableIds() {
377                 return true;
378             }
379         };
380
381         /**使用适配器*/
382         ExpandableListView expandListView = (ExpandableListView) this.findViewById(R.id.ecpandable);
383         expandListView.setGroupIndicator(null);//去掉默认的下指箭头
384         expandListView.setDivider(null);//去掉下行线
385        /* expandListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
386             @Override
387             public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
388                 down.setBackground(getResources().getDrawable(R.drawable.show));
389                 return true;
390             }
391         });*/
392         expandListView.setAdapter(adapter);
393     }
394     private void init(){
395         for(int j =0;j<way_linear.length;j++){
396             way_linear[j] = new LinearLayout(extendList.this);
397             exp_linear[j] = new LinearLayout(extendList.this);
398             push_linear[j] = new LinearLayout(extendList.this);
399         }
400         //初始化
401         tips = (TextView) child.findViewById(R.id.tips);
402         tips_info = (TextView) child.findViewById(R.id.tips_info);
403
404         way = (TextView) child.findViewById(R.id.way);
405         way_info = (TextView) child.findViewById(R.id.way_info);
406         way1 = (TextView) child.findViewById(R.id.way1);
407         way_info1 = (TextView) child.findViewById(R.id.way_info1);
408         way2 = (TextView) child.findViewById(R.id.way2);
409         way_info2 = (TextView) child.findViewById(R.id.way_info2);
410
411         exp = (TextView) child.findViewById(R.id.exp);
412         exp_info = (TextView) child.findViewById(R.id.exp_info);
413         exp1 = (TextView) child.findViewById(R.id.exp1);
414         exp_info1 = (TextView) child.findViewById(R.id.exp_info1);
415         exp2 = (TextView) child.findViewById(R.id.exp2);
416         exp_info2 = (TextView) child.findViewById(R.id.exp_info2);
417
418         push = (TextView) child.findViewById(R.id.push);
419         push_info = (TextView) child.findViewById(R.id.push_info);
420         push1 = (TextView) child.findViewById(R.id.push1);
421         push_info1 = (TextView) child.findViewById(R.id.push_info1);
422         push2 = (TextView) child.findViewById(R.id.push2);
423         push_info2 = (TextView) child.findViewById(R.id.push_info2);
424
425         way_linear[0] = (LinearLayout) child.findViewById(R.id.way_linear);
426         way_linear[1] = (LinearLayout) child.findViewById(R.id.way1_linear);
427         way_linear[2] = (LinearLayout) child.findViewById(R.id.way2_linear);
428         exp_linear[0] = (LinearLayout) child.findViewById(R.id.exp_linear);
429         exp_linear[1] = (LinearLayout) child.findViewById(R.id.exp1_linear);
430         exp_linear[2] = (LinearLayout) child.findViewById(R.id.exp2_linear);
431         push_linear[0] = (LinearLayout) child.findViewById(R.id.push_linear);
432         push_linear[1] = (LinearLayout) child.findViewById(R.id.push1_linear);
433         push_linear[2] = (LinearLayout) child.findViewById(R.id.push2_linear);
434     }
435     public void init_two(){
436         top_left = (TextView) child.findViewById(R.id.top);
437         top_info = (TextView) child.findViewById(R.id.top_info);
438     }
439 }

OK,觉得还可以的话,麻烦帮忙点下右下角的推荐。

时间: 2024-10-16 09:04:06

站在巨人的肩膀上---重新自定义 android- ExpandableListView 收缩类,实现列表的可收缩扩展的相关文章

站在巨人的肩膀上学习Android开发

我们知道,一开始最好的学习方法是模仿,尤其是模仿巨人.那说到Android开发的模仿自然就是分析并研究主流程序的布局.实现方法,进而提升自己的技术. 第一招----逆向工程 要分析"巨人"们的软件,自然免不了逆向工程,即将APK程序转化为我们可以看的懂得源码.这个google官方已经帮我们做好了工具,apktool就是一款很好的逆向工具. 下载地址为:http://pan.baidu.com/s/1kTqRhaR 我们以分析微信为例来说明这个工具的使用: 你只需执行如下命令,即完成了反

站在巨人的肩膀上,C++开源库大全

程序员要站在巨人的肩膀上,C++拥有丰富的开源库,这里包括:标准库.Web应用框架.人工智能.数据库.图片处理.机器学习.日志.代码分析等. 标准库 C++ Standard Library:是一系列类和函数的集合,使用核心语言编写,也是C++ISO自身标准的一部分. Standard Template Library:标准模板库 C POSIX library : POSIX系统的C标准库规范 ISO C++ Standards Committee :C++标准委员会 框架 C++通用框架和库

站在巨人的肩膀上才能看得更加远[Amo]

本来只是路过,写详细一点.我看楼主浮躁得不得了.现在什么都不要做了,先去看几遍<不要做浮躁的嵌入式工程师>这篇文章,想清楚了,再动手吧.我做了个实例,不用ST的库来点LED,解答你的问题我的 KeilMDK 3.5我的STM32板子奋斗版是 ,IC 是 STM32F103VET6调试工具 JLINK V8LED 接在 PB5 ,高电平点亮既然楼主说一定懂C语言了,那么对于下面我的问题,不查百度,完全靠自己,懂多少?然后查了百度之后又能懂多少?(一)新建 keil 工程,IC选择 ST 公司的

站在巨人的肩膀上——人事项目数据导出word

最近在做人事项目中的,数据导出word,具体的说就是从web客户端页面获取信息,添加到信函模板中,再导出为word文档.总结一下,学会了两种方法,1.通过将word模板转换为html文件,输出word.2.利用第三方组件Aspose.Words操作word模板,输出word. 一.通过将word模板转换为html文件,输出word 1.制作word模板,在word文档中要添加内容的地方输入占位符. 2.把word模板另存为html文件. 文件-另存为-网页htm文件. 3前台代码 <asp:Bu

站在巨人的肩膀上,谈 app 的创新性

这段时间做了.看了.听了,也想了很多,我们的成功始终是站在巨人的肩膀上的,在学习了很多工业界大牛的经验之谈之后,我经过认真的思考,特别想整理这样一篇文章,希望与许多有梦想的 IT 小伙伴儿们共享.共勉!如果说的不对的地方,欢迎大家在下面留言讨论,虚心学习. 随着移动设备的普遍和相关技术的成熟发展,我们都希望自己可以开发一个好用的应用,不管是公益性的还是旨在运营推广的app,既然练手何不做的有声有色.如果你不是在资源丰富的平台下,而是自己组队开发一个app,并向体现自己的竞争力,能够脱颖而出,那么

小游戏“跳一跳”——站在巨人的肩膀上,用技术为自己助力

在更新最新版微信之后,聊天列表下拉会出现一个崭新的模块,其中就有新推出的"跳一跳"小游戏.而在我几经努力奋斗到266分的时候,已经有技术大牛占据1999的高地... 抱着试一试的心态和蠢蠢欲动的好奇心... 实现了程序助力玩游戏... 具体代码来自gitHub的python大牛... 感兴趣的同学可以和我一起站在巨人的肩膀上... 另外说一点, 如果以后还想玩"跳一跳"的话... 不建议你接着往下看... 因为当你有了捷径... 整个游戏瞬间变得索然无味... 如果

年薪百万的程序员都是站在巨人的肩膀上开发

要想成为一名软件开发者需要学习各种专业知识.技术与框架.比如算法.数据结构.编程语言.流行框架等.但是要想成为更加出色的软件开发者,你要学习的就不仅仅是专业上的知识了. 标题过于浮夸,希望大家谅解,但本篇是满满的干货.今天我想分享一点关于软件开发者如何改进职业技能从而变得更擅长于自身工作的技巧.这里要谈的主题是通用性的,并没有针对任何特定的技术栈.其实这里要谈的大部分甚至都不是针对 IT 的.这些都是如何形成个人特质,跟同事.客户改进协作,以及拓展作为软件开发者职业生涯的一般性建议. 端到端理解

软件工程——站在巨人的肩膀上抱团取暖

摘要 软件工程是一门研究用工程化方法构建和维护有效的.实用的和高质量的软件的学科. 而工程化的最主要的特点是系统化.规范化.可量化并且严格控制流程得完成开发或生产任务,在此严格的条件下优质.高效的进行生产活动. 前言 当初懵懂无知地选择了软件工程这门专业,过了大一一年才开始程序员该有的博客之旅.而我认为“程序猿”是最需要最会站在巨人的肩膀上的,代码靠借鉴,思路靠传承,在原有的基础上创新,于是成就了无数优秀的软件. 程序员都知道 :程序 = 算法 + 数据结构 软件 = 程序 + 软件工程 软件企

站在“巨人”的肩膀上运维

现实问题 之前在论坛看到一个运维工程师的帖子,内容如下: "现在的一个IT工作者最头疼的就是加班,秃顶的是IT工作者最多.单身的是IT工作者最多.没有约会,没有休闲,没有旅游还是IT工作者最多.这可怎么办呢?我是一名IT运维工程师,每天的工作量很大,更不敢离开机器半步,长期跟设备.服务器打交道,因为怕万一机器出毛病,自己负担不起业务上的麻烦,又怕经理的"炒鱿鱼",况且公司还不肯出钱雇很多IT运维人员,让我一个人看着这么多的设备,真是连眼都不敢眨一下,雇来几个人也是呆不长就走人