[ 转]Android折叠列表 ExpandableList
16lz
2021-01-24
本文转自:http://lovezhou.iteye.com/blog/848744
ExpandableList 是折叠列表,通过继承ExpandableListActivity 类就可以非常简单的实现折叠列表。效果图:
代码实现
Java代码
- packagecom.zhou.activity;
- importandroid.app.ExpandableListActivity;
- importandroid.os.Bundle;
- importandroid.view.ContextMenu;
- importandroid.view.Gravity;
- importandroid.view.MenuItem;
- importandroid.view.View;
- importandroid.view.ViewGroup;
- importandroid.view.ContextMenu.ContextMenuInfo;
- importandroid.widget.AbsListView;
- importandroid.widget.BaseExpandableListAdapter;
- importandroid.widget.ExpandableListAdapter;
- importandroid.widget.ExpandableListView;
- importandroid.widget.TextView;
- importandroid.widget.Toast;
- importandroid.widget.ExpandableListView.ExpandableListContextMenuInfo;
- publicclassExpandableListextendsExpandableListActivity{
- //声明adapter
- privateExpandableListAdaptermAdapter;
- @Override
- protectedvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- //设这标题
- setTitle("可扩展的列表");
- //实例化adapter
- mAdapter=newMyExpandableListAdapter();
- //为列表设置adapter
- setListAdapter(mAdapter);
- //为list注册context菜单
- registerForContextMenu(this.getExpandableListView());
- }
- @Override
- publicbooleanonChildClick(ExpandableListViewparent,Viewv,
- intgroupPosition,intchildPosition,longid){
- Toast.makeText(this,"组元素索引:"+groupPosition+"子元素索引:"+childPosition,Toast.LENGTH_SHORT).show();
- returnsuper.onChildClick(parent,v,groupPosition,childPosition,id);
- }
- @Override
- publicvoidonGroupExpand(intgroupPosition){
- Toast.makeText(this,"组元素索引:"+groupPosition,Toast.LENGTH_SHORT).show();
- super.onGroupExpand(groupPosition);
- }
- @Override
- publicvoidonCreateContextMenu(ContextMenumenu,Viewv,
- ContextMenuInfomenuInfo){
- menu.setHeaderTitle("上下文菜单");
- menu.add(0,0,0,"单击我");
- }
- //单击上下文菜单后的逻辑
- @Override
- publicbooleanonContextItemSelected(MenuItemitem){
- ExpandableListContextMenuInfoinfo=(ExpandableListContextMenuInfo)item.getMenuInfo();
- Stringtitle=((TextView)info.targetView).getText().toString();
- inttype=ExpandableListView.getPackedPositionType(info.packedPosition);
- if(type==ExpandableListView.PACKED_POSITION_TYPE_CHILD){
- intgroupPos=ExpandableListView.getPackedPositionGroup(info.packedPosition);
- intchildPos=ExpandableListView.getPackedPositionChild(info.packedPosition);
- Toast.makeText(this,title+"组元素索引:"+groupPos+"子元素索引:"+childPos,Toast.LENGTH_SHORT).show();
- returntrue;
- }elseif(type==ExpandableListView.PACKED_POSITION_TYPE_GROUP){
- intgroupPos=ExpandableListView.getPackedPositionGroup(info.packedPosition);
- Toast.makeText(this,title+"组元素索引:"+groupPos,Toast.LENGTH_SHORT).show();
- returntrue;
- }
- returnfalse;
- }
- //自定义Adapter
- publicclassMyExpandableListAdapterextendsBaseExpandableListAdapter{
- //父列表数据
- privateString[]groups=
- {
- "吉林省",
- "辽宁省",
- "黑龙江省",
- "山东省"
- };
- //子列表数据
- privateString[][]children=
- {
- {"长春市"},
- {"沈阳市","铁岭市"},
- {"哈尔滨市","齐齐哈尔市","牡丹江市"},
- {"济南市","青岛市","淄博市","潍坊市"}
- };
- @Override
- publicObjectgetChild(intgroupPosition,intchildPosition){
- returnchildren[groupPosition][childPosition];
- }
- @Override
- publiclonggetChildId(intgroupPosition,intchildPosition){
- returnchildPosition;
- }
- @Override
- publicintgetChildrenCount(intgroupPosition){
- returnchildren[groupPosition].length;
- }
- //取子列表中的某一项的View
- @Override
- publicViewgetChildView(intgroupPosition,intchildPosition,
- booleanisLastChild,ViewconvertView,ViewGroupparent){
- TextViewtextView=getGenericView();
- textView.setText(getChild(groupPosition,childPosition).toString());
- returntextView;
- }
- @Override
- publicObjectgetGroup(intgroupPosition){
- returngroups[groupPosition];
- }
- @Override
- publicintgetGroupCount(){
- returngroups.length;
- }
- @Override
- publiclonggetGroupId(intgroupPosition){
- returngroupPosition;
- }
- //取父列表中的某一项的View
- @Override
- publicViewgetGroupView(intgroupPosition,booleanisExpanded,
- ViewconvertView,ViewGroupparent){
- TextViewtextView=getGenericView();
- textView.setText(getGroup(groupPosition).toString());
- returntextView;
- }
- @Override
- publicbooleanhasStableIds(){
- returntrue;
- }
- @Override
- publicbooleanisChildSelectable(intgroupPosition,intchildPosition){
- returntrue;
- }
- //获取某一项的View的逻辑
- privateTextViewgetGenericView(){
- AbsListView.LayoutParamslp=newAbsListView.LayoutParams(
- ViewGroup.LayoutParams.FILL_PARENT,48);
- TextViewtextView=newTextView(ExpandableList.this);
- textView.setLayoutParams(lp);
- textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
- textView.setPadding(32,0,0,0);
- returntextView;
- }
- }
- }
package com.zhou.activity;import android.app.ExpandableListActivity;import android.os.Bundle;import android.view.ContextMenu;import android.view.Gravity;import android.view.MenuItem;import android.view.View;import android.view.ViewGroup;import android.view.ContextMenu.ContextMenuInfo;import android.widget.AbsListView;import android.widget.BaseExpandableListAdapter;import android.widget.ExpandableListAdapter;import android.widget.ExpandableListView;import android.widget.TextView;import android.widget.Toast;import android.widget.ExpandableListView.ExpandableListContextMenuInfo;public class ExpandableList extends ExpandableListActivity {//声明adapterprivate ExpandableListAdapter mAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);//设这标题setTitle("可扩展的列表");//实例化adaptermAdapter = new MyExpandableListAdapter();//为列表设置adaptersetListAdapter(mAdapter);//为list注册context菜单registerForContextMenu(this.getExpandableListView());}@Overridepublic boolean onChildClick(ExpandableListView parent, View v,int groupPosition, int childPosition, long id) {Toast.makeText(this, " 组元素索引: " + groupPosition + " 子元素索引: " + childPosition, Toast.LENGTH_SHORT).show();return super.onChildClick(parent, v, groupPosition, childPosition, id);}@Overridepublic void onGroupExpand(int groupPosition) {Toast.makeText(this, " 组元素索引: " + groupPosition, Toast.LENGTH_SHORT).show();super.onGroupExpand(groupPosition);}@Overridepublic void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {menu.setHeaderTitle("上下文菜单");menu.add(0, 0, 0, "单击我");}// 单击上下文菜单后的逻辑@Overridepublic 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 + " 组元素索引: " + groupPos + " 子元素索引: " + childPos, Toast.LENGTH_SHORT).show();return true;} else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);Toast.makeText(this, title + " 组元素索引: " + groupPos, Toast.LENGTH_SHORT).show();return true;}return false;}//自定义Adapterpublic class MyExpandableListAdapter extends BaseExpandableListAdapter {// 父列表数据private String[] groups = { "吉林省", "辽宁省", "黑龙江省","山东省" };// 子列表数据private String[][] children = {{ "长春市" },{ "沈阳市", "铁岭市" },{ "哈尔滨市", "齐齐哈尔市", "牡丹江市" },{ "济南市", "青岛市", "淄博市", "潍坊市" }};@Overridepublic Object getChild(int groupPosition, int childPosition) {return children[groupPosition][childPosition];}@Overridepublic long getChildId(int groupPosition, int childPosition) {return childPosition;}@Overridepublic int getChildrenCount(int groupPosition) {return children[groupPosition].length;}// 取子列表中的某一项的 View@Overridepublic View getChildView(int groupPosition, int childPosition,boolean isLastChild, View convertView, ViewGroup parent) {TextView textView = getGenericView();textView.setText(getChild(groupPosition, childPosition).toString());return textView;}@Overridepublic Object getGroup(int groupPosition) {return groups[groupPosition];}@Overridepublic int getGroupCount() {return groups.length;}@Overridepublic long getGroupId(int groupPosition) {return groupPosition;}// 取父列表中的某一项的 View@Overridepublic View getGroupView(int groupPosition, boolean isExpanded,View convertView, ViewGroup parent) {TextView textView = getGenericView();textView.setText(getGroup(groupPosition).toString());return textView;}@Overridepublic boolean hasStableIds() {return true;}@Overridepublic boolean isChildSelectable(int groupPosition, int childPosition) {return true;}// 获取某一项的 View 的逻辑private TextView getGenericView() {AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 48);TextView textView = new TextView(ExpandableList.this);textView.setLayoutParams(lp);textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);textView.setPadding(32, 0, 0, 0);return textView;}}}
- ExpandableList.rar (44.9 KB)
- 下载次数: 368
更多相关文章
- Android(安卓)高仿QQ 好友分组列表
- android checkbox多选框实现
- Opengrok环境搭建--阅读Android源码
- Android杂一
- Android(安卓)代码片段
- Android的postOnAnimation分析
- 【Android】树形菜单、扩展下拉菜单BaseExpandableListAdapter、
- android获取应用列表
- Android(安卓)Touch事件