多级列表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