ExpandableListView的使用多级列表

多级列表ExpandableListView

扩展列表能够显示一个指示在每项显示项的当前状态(状态通常是一个扩展的组,组的孩子,或倒塌,最后一个孩子)。使用setchildindicator(drawable)setgroupindicator(drawable)(或相应的XML属性)来设置这些指标,一个默认的风格多级列表提供指标,将示给意见多级列表。布局android.r.layout.simple_expandable_list_item_1和android.r.layout.simple_expandable_list_item_2(应用simplecursortreeadapter)包含位置信息的首选指标。

效果图:

 1 activity_main.xml
 2 <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:background="#ffffff"
 6     android:orientation="vertical">
 7     <ExpandableListView
 8         android:id="@+id/expandableListView"
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:divider="#E4E4E4"
12         android:dividerHeight="5dp">
13     </ExpandableListView>
14 </LinearLayout>
15 child_item.xml
16 <?xmlversion="1.0"encoding="utf-8"?>
17 <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
18     android:layout_width="match_parent"
19     android:layout_height="match_parent"
20     android:orientation="vertical">
21     <TextView
22         android:id="@+id/textViews"
23         android:layout_width="wrap_content"
24         android:layout_height="wrap_content"/>
25     <View
26         android:layout_width="match_parent"
27         android:layout_height="0.5dp"
28         android:background="#ff0000"/>
29 </LinearLayout>
30 groud_item.xml
31 <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
32     xmlns:tools="http://schemas.android.com/tools"
33     android:layout_width="match_parent"
34     android:layout_height="match_parent"
35    android:gravity="center_vertical"
36     android:orientation="horizontal">
37     <ImageView
38         android:id="@+id/imageView1"
39         android:layout_width="65dp"
40         android:layout_height="55dp"
41         android:layout_marginLeft="10dp"
42         android:scaleType="fitXY"
43         android:src="@drawable/l1"/>
44     <TextView
45         android:id="@+id/textView"
46         android:layout_width="wrap_content"
47         android:layout_height="wrap_content"
48         android:layout_marginLeft="10dp"
49         android:text="斯蒂芬"/>
50 </LinearLayout>
 1 public class MainActivity extends Activity {
 2     private ExpandableListView listView;
 3     private List<String> group;
 4     private List<List<String>> child;
 5     private MyAdapter adapter;
 6     @Override
 7     protected void onCreate(Bundle savedInstanceState) {
 8         super.onCreate(savedInstanceState);
 9         setContentView(R.layout.activity_main);
10
11         listView = (ExpandableListView) findViewById(R.id.expandableListView);
12         /**
13          * 初始化数据
14          */
15         initData();
16         adapter = new MyAdapter(this,group,child);
17         listView.setAdapter(adapter);
18
19     }
20
21
22
23
24     private void initData() {
25         group = new ArrayList<String>();
26         child = new ArrayList<List<String>>();
27         addInfo("笑傲江湖",new String[]{"东方不败","风清扬","令狐冲","岳不群"});
28         addInfo("天龙八部", new String[]{"乔峰","虚竹","段誉"});
29         addInfo("九阴真经", new String[]{"中神通","东邪","西毒","南帝","北丐"});
30     }
31
32     /**
33      * 添加数据信息
34      * @param g
35      * @param c
36      */
37     private void addInfo(String g,String[] c) {
38         group.add(g);
39         List<String> list = new ArrayList<String>();
40         for (int i = 0; i < c.length; i++) {
41             list.add(c[i]);
42         }
43         child.add(list);
44     }
45
46 }
  1 /**
  2  * expandableListView的用法同ListView
  3  *
  4  */
  5 public class MyAdapter extends BaseExpandableListAdapter {
  6     private Context context;
  7     private List<String> group;
  8     private List<List<String>> child;
  9     private int[] img={R.drawable.l2,R.drawable.l3,R.drawable.l1};
 10     public MyAdapter(Context context, List<String> group,
 11             List<List<String>> child) {
 12         this.context = context;
 13         this.group = group;
 14         this.child = child;
 15     }
 16
 17     @Override
 18     public int getGroupCount() {
 19         return group.size();
 20     }
 21
 22     @Override
 23     public int getChildrenCount(int groupPosition) {
 24         return child.get(groupPosition).size();
 25     }
 26
 27     @Override
 28     public Object getGroup(int groupPosition) {
 29         return group.get(groupPosition);
 30     }
 31
 32     @Override
 33     public Object getChild(int groupPosition, int childPosition) {
 34         return child.get(childPosition).get(childPosition);
 35     }
 36
 37     @Override
 38     public long getGroupId(int groupPosition) {
 39         return groupPosition;
 40     }
 41
 42     @Override
 43     public long getChildId(int groupPosition, int childPosition) {
 44         return childPosition;
 45     }
 46
 47     @Override
 48     public boolean hasStableIds() {
 49         return false;
 50     }
 51
 52     /**
 53     *
 54     * 获取显示指定组的视图对象
 55     *
 56     * @param groupPosition 组位置
 57     * @param isExpanded 该组是展开状态还是伸缩状态
 58     * @param convertView 重用已有的视图对象
 59     * @param parent 返回的视图对象始终依附于的视图组
 60     * @return
 61     * @see android.widget.ExpandableListAdapter#getGroupView(int, boolean, android.view.View,
 62     *      android.view.ViewGroup)
 63     */
 64     @Override
 65     public View getGroupView(int groupPosition, boolean isExpanded,
 66             View convertView, ViewGroup parent) {
 67         ViewHolder holder;
 68         if (convertView == null) {
 69             convertView = LayoutInflater.from(context).inflate(
 70                     R.layout.groud_item, null);
 71             holder = new ViewHolder();
 72             holder.textView = (TextView) convertView
 73                     .findViewById(R.id.textView);
 74             holder.mImageView=(ImageView) convertView.findViewById(R.id.imageView1);
 75             convertView.setTag(holder);
 76         } else {
 77             holder = (ViewHolder) convertView.getTag();
 78         }
 79         holder.textView.setText(group.get(groupPosition));
 80         holder.textView.setTextSize(25);
 81         holder.textView.setPadding(36, 10, 0, 10);
 82         holder.mImageView.setImageResource(img[groupPosition]);
 83         return convertView;
 84
 85     }
 86
 87     /**
 88     *
 89     * 获取一个视图对象,显示指定组中的指定子元素数据。
 90     *
 91     * @param groupPosition 组位置
 92     * @param childPosition 子元素位置
 93     * @param isLastChild 子元素是否处于组中的最后一个
 94     * @param convertView 重用已有的视图(View)对象
 95     * @param parent 返回的视图(View)对象始终依附于的视图组
 96     * @return
 97     * @see android.widget.ExpandableListAdapter#getChildView(int, int, boolean, android.view.View,
 98     *      android.view.ViewGroup)
 99     */
100     @Override
101     public View getChildView(int groupPosition, int childPosition,
102             boolean isLastChild, View convertView, ViewGroup parent) {
103         ViewHolder holder;
104         if (convertView == null) {
105             convertView = LayoutInflater.from(context).inflate(
106                     R.layout.child_item, null);
107             holder = new ViewHolder();
108             holder.textView = (TextView) convertView
109                     .findViewById(R.id.textViews);
110             convertView.setTag(holder);
111         } else {
112             holder = (ViewHolder) convertView.getTag();
113         }
114         holder.textView.setText(child.get(groupPosition).get(childPosition));
115         holder.textView.setTextSize(20);
116         holder.textView.setPadding(72, 10, 0, 10);
117         return convertView;
118     }
119
120
121
122      /**
123     *
124     * 是否选中指定位置上的子元素。
125     *
126     * @param groupPosition
127     * @param childPosition
128     * @return
129     * @see android.widget.ExpandableListAdapter#isChildSelectable(int, int)
130     */
131     @Override
132     public boolean isChildSelectable(int groupPosition, int childPosition) {
133         return false;
134     }
135
136
137     class ViewHolder {
138         ImageView mImageView;
139         TextView textView;
140     }
141 }

源码下载:

Eclipse下载:http://download.csdn.net/detail/dickyqie/9630549

AndroidStudio下载:https://github.com/DickyQie/ListViewExpandableListViewDelete/tree/expandablelistview

时间: 2024-10-29 19:05:35

ExpandableListView的使用多级列表的相关文章

Android UI编程(2)——多级列表(ExpandableListView)

参考博客: http://blog.csdn.net/xyz_lmn/article/details/6906268 http://www.apkbus.com/android-124715-1-1.html 有时候,使用ListView并不能满足应用程序所需要的功能.有些应用程序需要多组ListViw,这时候我们就要使用一种新的控件ExpandableListView--可以扩展的ListView.它的作用就是将ListView进行分组.就好像我们使用QQ的时候,有"我的好友",&q

word定义多级列表

1.单击开始选项卡里的多级列表按钮,在下拉列表中选择定义新的多级列表 2.先设置第一级编号,选择阿拉伯数字1,2,3,...,并在自动编号"1"的左右分别输入"第""章",级别链接到样式选择标题一 3.设置第二级编号,将级别选择2,级别链接到样式选择标题二 4.注意如果不小心将输入编号的格式框的数字删掉了,不能自己手打1.1,应该选择"包含的级别编号来自"为"级别1","此级别的编号样式"

【Office Word】多级列表的使用

设置: 第一步,Word2010中,开始-->多级列表-->自定义多级列表 图 2 第二步,出现对话框后,就可以开始设置关于多级列表的各种选项了,在这这里你可以设置一级.二级……标题,它们的开始编号,编号格式等等,最后点击左下角的“更多”按钮,的选择“将级别链接到样式”里的某一个,即应用到哪一个样式.一般可以将第一级标题链接到标题1,第二级链接到标题2等.这一步非常重要,然后我们就可以根据需要修改每一级别的标题样式,比如字体.字号. 使用: 输入一段文字如下所示: 然后将光标定位标题所在的行.

基于bootstrup的jQuery多级列表树

bootstrap-treeview是一款效果非常酷的基于bootstrup的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和优雅的方式来显示一些继承树结构,如视图树.列表树等等. 在线演示:http://www.htmleaf.com/Demo/201502141380.html 下载地址:http://www.htmleaf.com/jQuery/Menu-Navigation/201502141379.html

(转载)自定义ExpandableListView,实现二级列表效果

先看效果图: 上图是我们要实现的效果,那么现在我们开始着手去做,主要分为以下几步: 一丶我们需要根据效果图去思考该如何动手,从上图分析看,我们可以用一个相对布局RelativeLayout来完成group(一级item)的布局设计,至于child(二级item)的布局,我们可以用一个TextView来完成,当然,如果如要更复杂的效果可以参照一级item的布局方式进行. 以下是main.xml丶group.xml和child.xml的布局: main.xml <?xml version="1

jQuery和CSS3动感手风琴多级列表树菜单

mtree.js是一款效果非常炫酷的jQuery和CSS3动感手风琴多级列表树菜单插件.该手风琴多级列表树菜单基于velocity.js和CSS3 transitions来制作.它提供了5种主题样式的手风琴列表树菜单效果.这5种主题分别为:bubba,skinny,transit,jet,nix. 效果演示:http://www.htmleaf.com/Demo/201505251902.html 下载地址:http://www.htmleaf.com/jQuery/Menu-Navigatio

基于bootstrap的jQuery多级列表树插件

http://www.cnblogs.com/mfc-itblog/p/5233453.html http://www.htmleaf.com/jQuery/Menu-Navigation/201502141379.html http://www.htmleaf.com/Demo/201502141380.html 简要教程 bootstrap-treeview是一款效果非常酷的基于bootstrap的jQuery多级列表树插件.该jQuery插件基于Twitter Bootstrap,以简单和

Word自定义多级列表样式

Word自定义多级列表样式: 1. 2. 3.取个名字 在这里鼠标移上时显示 : 4. 5. 定义完成,即可使用: 原文地址:https://www.cnblogs.com/q1104460935/p/9552629.html

Word 多级列表

在新文档中,点击"定义新的多级列表" 图 级别1 图 级别2(其他级别类似) 需要注意上图中的四个红框位置: 将级别链接到样式:编号和样式绑定. 要在库中显示的级别:这个地方一直搞不懂,选了之后都是显示的同一个级别,但是每次还是要选择,在下面的包含的级别编号来自和重新开始列表的间隔用得到. 重新开始列表的间隔:选择比当前级别小一个的级别编号.默认已经选择正确. 包含的级别编号来自:默认已经选择正确.如果需要另外调整,将光标放在想要调整的那个编号的后面再选择对应的级别(手动输入无效!).