Android 自定义 ExpandableListView

Android中有一控件是ExpandableListView,比ListView更高级,ExpandableListView的效果很实用,比如因为需要查看一堆文件的目录结构或者开发像QQ好友那样的界面,就应该使用Expandablelistview。

本文最终效果如下:

1.jpg

首先是Activity代码,实际开发中数据(包括父item,子item及图片,Expandablelistview布局也可以轻易更改)可以很方便的从数据库或网络动态取得,本文方便起见数据就先定死了。

public  class  C_ExpandableListView  extends  Activity  {

    ExpandableListView expandableList
    public String[] str1 = { "我的好友", "陌生人", "黑名单","yilee","good","哈哈哈" }; 
    public String[] str2 = { "我了个去", "哈哈", "蟹", "XX", "我去" }; 
    public String[] str3 =  { "哈哈", "蟹", "XX", "我去" }; 
    public String[] str4 =  { "我了个去", "蟹", "XX", "我去" }; 
    public String[] str5 =  { "我了个去", "蟹", "XX", "我去" }; 
    public String[] str6 = { "yilee", "哈哈", "蟹", "XX", "我去" }; 
    public String[] str7 =  {  "哈哈", "蟹", "XX", "我去" }; 
    @Override 
    public void onCreate(Bundle savedInstanceState{ 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
        expandableList = (ExpandableListViewC_ExpandableListView.this 
                .findViewById(R.id.ExpandableListView01); 
        expandableList.setAdapter(new TreeViewAdapter(this)); 
        
    }

    public class TreeViewAdapter extends BaseExpandableListAdapter { 
        private LayoutInflater inflater
        private LayoutInflater inflater1;

        public TreeViewAdapter(Context c{ 
            this.inflater = LayoutInflater.from(c); 
            this.inflater1 = LayoutInflater.from(c); 
        }

        @Override 
        public Object getChild(int groupPosition, int childPosition{ 
            return childPosition
        }

        @Override 
        public long getChildId(int groupPosition, int childPosition{ 
            return 0
        }

        @Override 
        public View getChildView(int groupPosition, int childPosition, 
                boolean isLastChild, View convertView, ViewGroup parent{ 
            View myView = inflater1.inflate(R.layout.cc, null); 
            final int a=groupPosition
            final int b=childPosition
            myView.setBackgroundResource(R.drawable.child); 
            TextView textview = (TextViewmyView 
                    .findViewById(R.id.TextView001); 
            
            textview.setOnClickListener(new OnClickListener() { 
                
                @Override 
                public void onClick(View arg0{ 
                    Log.i("yileeeee", "groupPosition= "+a); 
                    Log.i("yileeeee", "childPosition= "+b); 
                } 
            });        
            if(groupPosition==0){ 
                textview.setText(str2[childPosition]); 
            }else if(groupPosition==1){ 
                textview.setText(str3[childPosition]); 
            }else if(groupPosition==2){ 
                textview.setText(str4[childPosition]);    
            }else if(groupPosition==3){ 
                textview.setText(str5[childPosition]);    
            }else if(groupPosition==4){ 
                textview.setText(str6[childPosition]);    
            }else if(groupPosition==5){ 
                textview.setText(str7[childPosition]);    
            }    
            return myView
        }

        @Override 
        public int getChildrenCount(int groupPosition{ 
            if(groupPosition==0){ 
                return str2.length
            }else if(groupPosition==1){ 
                return str3.length
            }else if(groupPosition==2){ 
                return str4.length
            }else if(groupPosition==3){ 
                return str5.length
            }else if(groupPosition==4){ 
                return str6.length
            }else { 
                return str7.length
            } 
        }

        @Override 
        public Object getGroup(int groupPosition{ 
            return "dd"
        }

        @Override 
        public int getGroupCount() { 
            return str1.length
        }

        @Override 
        public long getGroupId(int groupPosition{ 
            return groupPosition
        }

        @Override 
        public View getGroupView(int groupPosition, boolean isExpanded, 
                View convertView, ViewGroup parent{ 
            View myView = inflater.inflate(R.layout.dd, null);

            myView.setBackgroundResource(R.drawable.group); 
            TextView textview = (TextViewmyView.findViewById(R.id.TextView01); 
            textview.setText(str1[groupPosition]); 
            return myView
        }

        @Override 
        public boolean hasStableIds() { 
            return false
        }

        @Override 
        public boolean isChildSelectable(int groupPosition, int childPosition{ 
            return false
        } 
    } 
}

其中类TreeViewAdapter是我们的自定义Adapter,继承自BaseExpandableListAdapter。

getChildrenCount比较麻烦,因为么个子item数目并不一样,可以把子数据放入一个String三维数组,这样只需return str[position],返回的便是子item的数据,样在getChildView在也应该这样设置:textview.setText(str[position][childPosition]);   

我们需要三个布局文件,一个是activity里面是ExpandableListView

<ExpandableListView  android:id= "@+id/ExpandableListView01" 
         android:layout_width= "200dp"  android:layout_height= "fill_parent" 
         android:layout_x= "20dip"  android:layout_y= "30dip" 
         android:groupIndicator= "@null" android:childDivider= "@drawable/child_divider" 
         android:clickable= "true"  android:scrollbarAlwaysDrawHorizontalTrack= "true" > 
</ExpandableListView>

第二个是描述父item的布局文件

<TextView  android:id= "@+id/TextView01"  android:layout_width= "wrap_content" 
         android:layout_height= "wrap_content"  android:textSize= "16px" 
         android:gravity= "center" > 
</TextView>

最后一个是描述子item的

<ImageView  android:id= "@+id/ImageView01" 
         android:layout_height= "30dp"  android:layout_width= "30dp" 
         android:background= "@drawable/head" > 
</ImageView>

<TextView android:id="@+id/TextView001" android:layout_height="fill_parent" 
        android:layout_width="fill_parent" android:gravity="center"> 
</TextView>

这样就可以轻易实现ExpandableListAdapter 高度自定义了。

转载于:https://www.cnblogs.com/mahang/archive/2011/10/06/2199754.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值