Android ExpandableListView的使用
Android ExpandableListView的使用
一、MainActivity要继承ExpandableListActivity。效果是当单机ListView的子项是显示另一个ListView。
public class MainActivity extends ExpandableListActivity { private static final String NAME = "NAME" ; private static final String IS_EVEN = "IS_EVEN" ; private ExpandableListAdapter eListAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); List<Map<String,String>> groupData = new ArrayList<Map<String,String>>(); List<List<Map<String, String>>> childDataList = new ArrayList<List<Map<String,String>>>(); for ( int i = 0 ; i < 10 ; i++) { Map<String, String> curGroupMap = new HashMap<String, String>(); groupData.add(curGroupMap); curGroupMap.put(NAME, "Group" +i); curGroupMap.put(IS_EVEN, (i% 2 == 0 )? "This group is even" : "This group is odd" ); List<Map<String, String>> children = new ArrayList<Map<String,String>>(); for ( int j = 0 ; j < 8 ; j++) { Map<String, String> curChildMap = new HashMap<String, String>(); children.add(curChildMap); curChildMap.put(NAME, "Child" + j); curChildMap.put(IS_EVEN, (j % 2 == 0 ) ? "This child is even" : "This child is odd" ); } childDataList.add(children); } eListAdapter = new SimpleExpandableListAdapter( this , groupData, android.R.layout.simple_expandable_list_item_2, new String[] {NAME, IS_EVEN }, new int [] { android.R.id.text1, android.R.id.text2}, childDataList, android.R.layout.simple_expandable_list_item_2, new String[] {NAME, IS_EVEN}, new int [] { android.R.id.text1, android.R.id.text2}); setListAdapter(eListAdapter); } } |
代码解释
1、groupData是父数据 ,childDataList是子数据。
2、android.R.layout.simple_expandable_list_item_2表示list的实现方式
3、new String[] { NAME,IS_EVEN}list需要显示的数据。
效果图:
也就是单机Group2时,显示Group2的数据。
二、数据源:SimpleCursorTreeAdapter的使用
显示通讯录中的姓名,单击用姓名,显示号码。前提还要分配读取通讯录的权限
<uses-permission android:name= "android.permission.READ_CONTACTS" /> |
代码如下:
public class ExpandableList2 extends ExpandableListActivity { private int mGroupIdColumnIndex; private String mPhoneNumberProjection[] = new String[] { People.Phones._ID, People.Phones.NUMBER }; private ExpandableListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // Query for people Cursor groupCursor = managedQuery(People.CONTENT_URI, new String[] {People._ID, People.NAME}, null , null , null ); // Cache the ID column index mGroupIdColumnIndex = groupCursor.getColumnIndexOrThrow(People._ID); // Set up our adapter mAdapter = new MyExpandableListAdapter(groupCursor, this , android.R.layout.simple_expandable_list_item_1, android.R.layout.simple_expandable_list_item_1, new String[] {People.NAME}, // Name for group layouts new int [] {android.R.id.text1}, new String[] {People.NUMBER}, // Number for child layouts new int [] {android.R.id.text1}); setListAdapter(mAdapter); } public class MyExpandableListAdapter extends SimpleCursorTreeAdapter { public MyExpandableListAdapter(Cursor cursor, Context context, int groupLayout, int childLayout, String[] groupFrom, int [] groupTo, String[] childrenFrom, int [] childrenTo) { super (context, cursor, groupLayout, groupFrom, groupTo, childLayout, childrenFrom, childrenTo); } @Override protected Cursor getChildrenCursor(Cursor groupCursor) { // Given the group, we return a cursor for all the children within that group // Return a cursor that points to this contact's phone numbers Uri.Builder builder = People.CONTENT_URI.buildUpon(); ContentUris.appendId(builder, groupCursor.getLong(mGroupIdColumnIndex)); builder.appendEncodedPath(People.Phones.CONTENT_DIRECTORY); Uri phoneNumbersUri = builder.build(); // The returned Cursor MUST be managed by us, so we use Activity's helper // functionality to manage it for us. return managedQuery(phoneNumbersUri, mPhoneNumberProjection, null , null , null ); } } |
三、通过BaseExpandableListAdapter绑定数据
1.BaseExpandableListAdapter
public class ExpandableList3 extends Activity { private String[] groups = { "group1" , "group2" , "group3" , "group4" }; private String[][] children = { { "g1 item1" , "g1 item2" , "g1 item3" , "g1 item4" }, { "g2 item1" , "g2 item2" , "g2 item3" , "g2 item4" }, { "g3 item1" , "g3 item2" }, { "g4 item1" , "g4 item2" } }; //ExpandableListAdapter mAdapter; private ExpandableListView expandableListView; private TextView tView = null ; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); tView = (TextView)findViewById(R.id.textView1); expandableListView = (ExpandableListView)findViewById(R.id.expandableListView1); ExpandableListAdapter adapter = new BaseExpandableListAdapter() { @Override public boolean isChildSelectable( int groupPosition, int childPosition) { // TODO Auto-generated method stub String string = groups[groupPosition] + children[groupPosition][childPosition]; tView.setText(string); return true ; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return true ; } @Override public View getGroupView( int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LinearLayout layout = new LinearLayout(ExpandableList3. this ); layout.setOrientation( 0 ); layout.setPadding( 50 , 0 , 0 , 0 ); ImageView imageView = new ImageView(ExpandableList3. this ); imageView.setImageResource(R.drawable.ic_launcher); layout.addView(imageView); TextView textView = getTextView(); textView.setText(getGroup(groupPosition).toString()); layout.addView(textView); return layout; } private TextView getTextView() { // TODO Auto-generated method stub AbsListView.LayoutParams lParams = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 64 ); TextView textView = new TextView(ExpandableList3. this ); textView.setLayoutParams(lParams); textView.setPadding( 20 , 0 , 0 , 0 ); textView.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); return textView; } @Override public long getGroupId( int groupPosition) { // TODO Auto-generated method stub return groupPosition; } @Override public int getGroupCount() { // TODO Auto-generated method stub return groups.length; } @Override public Object getGroup( int groupPosition) { // TODO Auto-generated method stub return groups[groupPosition]; } @Override public int getChildrenCount( int groupPosition) { // TODO Auto-generated method stub return children[groupPosition].length; } @Override public View getChildView( int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { // TODO Auto-generated method stub TextView textView = getTextView(); textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } @Override public long getChildId( int groupPosition, int childPosition) { // TODO Auto-generated method stub return childPosition; } @Override public Object getChild( int groupPosition, int childPosition) { // TODO Auto-generated method stub return children[groupPosition][childPosition]; } }; expandableListView.setAdapter(adapter); } } |
效果图:点击子项时,显示子项的信息。
2.数据源写一个类MyExpandableListAdapter,该类继承自 BaseExpandableListAdapter。
public class ExpandableList1 extends ExpandableListActivity { ExpandableListAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); // Set up our adapter mAdapter = new MyExpandableListAdapter(); setListAdapter(mAdapter); // register context menu, when long click the item, it will show a dialog registerForContextMenu(getExpandableListView()); } @Override public boolean onContextItemSelected(MenuItem item) { ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo(); String title = ((TextView) info.targetView).getText().toString(); int type = ExpandableListView.getPackedPositionType(info.packedPosition); if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition); Toast.makeText( this , title + ": Child " + childPos + " clicked in group " + groupPos, Toast.LENGTH_SHORT).show(); return true ; } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition); Toast.makeText( this , title + ": Group " + groupPos + " clicked" , Toast.LENGTH_SHORT).show(); return true ; } return false ; } /** * A simple adapter which maintains an ArrayList of photo resource Ids. * Each photo is displayed as an image. This adapter supports clearing the * list of photos and adding a new photo. * */ public class MyExpandableListAdapter extends BaseExpandableListAdapter { // Sample data set. children[i] contains the children (String[]) for groups[i]. private String[] groups = { "People Names" , "Dog Names" , "Cat Names" , "Fish Names" }; private String[][] children = { { "Arnold" , "Barry" , "Chuck" , "David" }, { "Ace" , "Bandit" , "Cha-Cha" , "Deuce" }, { "Fluffy" , "Snuggles" }, { "Goldy" , "Bubbles" } }; public Object getChild( int groupPosition, int childPosition) { return children[groupPosition][childPosition]; } public long getChildId( int groupPosition, int childPosition) { return childPosition; } public int getChildrenCount( int groupPosition) { return children[groupPosition].length; } public TextView getGenericView() { // Layout parameters for the ExpandableListView AbsListView.LayoutParams lp = new AbsListView.LayoutParams( ViewGroup.LayoutParams.FILL_PARENT, 64 ); TextView textView = new TextView(ExpandableList1. this ); textView.setLayoutParams(lp); // Center the text vertically textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT); // Set the text starting position textView.setPadding( 36 , 0 , 0 , 0 ); return textView; } public View getChildView( int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { TextView textView = getGenericView(); textView.setText(getChild(groupPosition, childPosition).toString()); return textView; } public Object getGroup( int groupPosition) { return groups[groupPosition]; } public int getGroupCount() { return groups.length; } public long getGroupId( int groupPosition) { return groupPosition; } public View getGroupView( int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { TextView textView = getGenericView(); textView.setText(getGroup(groupPosition).toString()); return textView; } public boolean isChildSelectable( int groupPosition, int childPosition) { return true ; } public boolean hasStableIds() { return true ; } } } |
效果图:
本文转自Work Hard Work Smart博客园博客,原文链接:http://www.cnblogs.com/linlf03/archive/2013/03/25/2980293.html,如需转载请自行联系原作者

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android Studio使用心得 - 简单介绍与环境配置
FBI Warning:欢迎转载,但请标明出处:http://blog.csdn.net/codezjx/article/details/38544823,未经本人允许请勿用于商业用途。感谢支持! 关于Android Studio 在2013 Google IO大会上公布的全新IDE Android Studio相信各位猿们并不陌生,截止2014的Google IO大会。尽管依旧木有公布正式版。可是依据我这几周的使用情况来说,BUG已经非常少了,全然不影响正常使用。 并且Android Studio是基于IntelliJ的,不管从执行速度上还是编程的快捷性上,都比Eclipse的体验要好,开发效率妥妥的提高了。 Android Studio vs Eclipse ADT 眼下Android Studio最大的缺点是还不支持NDK工具,假设项目里面有使用NDK的。预计要等正式版后才干用了。(或者通过第三方的编译环境,如Cygwin等,来编译本地代码) 关于版本号: 截至2014/08/13。眼下最新版是CanaryChannel的0.8.6 (补充说明一下这里的版本号:总共分为4个Cha...
- 下一篇
Android 资源的使用
Android 资源的使用 一、dimension资源的使用 Android中dimension单位有: px 像素 dp 密度mm 毫米 pt 点sp 刻度in英寸 dimension资源的定义 <resources> <!-- Default screen margins, per the Android Design guidelines. --> <dimen name= "activity_horizontal_margin" >16dp</dimen> <dimen name= "activity_vertical_margin" >16dp</dimen> <dimen name= "px" >10px</dimen> <dimen name= "dp" >10dp</dimen> <dimen name= "sp" >70sp</dimen> </resources> dimension资源的使用有两种方...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2全家桶,快速入门学习开发网站教程
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合Thymeleaf,官方推荐html解决方案