看看今天实现的 Android中个多级列表的功能,其实这就是一个小组件,但是如果用好了,可以实现很大的功能呢!接着,有点累,什么都不说了,看看看实现的过程就可以了,挺简单的!

1.看看布局文件main.xml文件

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:background="@drawable/bg"   
  7.     >  
  8.     <TextView   
  9.         android:layout_width="fill_parent"   
  10.         android:layout_height="wrap_content"   
  11.         android:text="那些上过与即将被上的大学课程:"  
  12.         android:textColor="#FF6100"  
  13.         android:textSize="20dp"  
  14.           
  15.           
  16.         />  
  17. <ExpandableListView   
  18.     android:id="@+id/elistview"  
  19.     android:layout_width="fill_parent"   
  20.     android:layout_height="wrap_content"   
  21.     android:layout_marginLeft="5dp"  
  22.      
  23.       
  24.     />  
  25. LinearLayout>  
2.接着看看主活动mainActivity.java
  1. package com.wang;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.view.ContextMenu;  
  6. import android.view.View;  
  7. import android.view.Window;  
  8. import android.view.WindowManager;  
  9. import android.view.ContextMenu.ContextMenuInfo;  
  10. import android.widget.ExpandableListAdapter;  
  11. import android.widget.ExpandableListView;  
  12. import android.widget.Toast;  
  13. import android.widget.ExpandableListView.OnChildClickListener;  
  14. import android.widget.ExpandableListView.OnGroupClickListener;  
  15. import android.widget.ExpandableListView.OnGroupCollapseListener;  
  16. import android.widget.ExpandableListView.OnGroupExpandListener;  
  17.   
  18. public class MaintActivity extends Activity {  
  19.     // 创建一个上下文菜单的方法   
  20.     public void onCreateContextMenu(ContextMenu menu, View v,  
  21.             ContextMenuInfo menuInfo) {  
  22.   
  23.         super.onCreateContextMenu(menu, v, menuInfo);  
  24.   
  25.         // 一个垂直滚动的两级列表。取得菜单项   
  26.         ExpandableListView.ExpandableListContextMenuInfo info = (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;  
  27.         // 获得这个类型 的位置   
  28.         int type = ExpandableListView  
  29.                 .getPackedPositionType(info.packedPosition);  
  30.         // 取得所在组的索引   
  31.         int group = ExpandableListView  
  32.                 .getPackedPositionGroup(info.packedPosition);  
  33.         // 取得子菜单的索引   
  34.         int child = ExpandableListView  
  35.                 .getPackedPositionGroup(info.packedPosition);  
  36.   
  37.         Toast.makeText(MaintActivity.this,  
  38.                 "类型 =" + type + "  分组:" + group + "  子选项:" + child,  
  39.                 Toast.LENGTH_LONG).show();  
  40.   
  41.     }  
  42.   
  43.     private ExpandableListView eListView = null;  
  44.     private ExpandableListAdapter adapter = null;  
  45.   
  46.     @Override  
  47.     public void onCreate(Bundle savedInstanceState) {  
  48.   
  49.         // 去除标题,   
  50.         this.requestWindowFeature(Window.FEATURE_NO_TITLE);  
  51.         // 取消状态栏,充满全屏   
  52.         this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  
  53.                 WindowManager.LayoutParams.FLAG_FULLSCREEN);  
  54.   
  55.         super.onCreate(savedInstanceState);  
  56.         super.setContentView(R.layout.main);  
  57.   
  58.         // 实例化组件   
  59.         this.eListView = (ExpandableListView) findViewById(R.id.elistview);  
  60.   
  61.         // 声明一个adapter对象   
  62.         adapter = new myExpendableadapler(this);  
  63.         // 设置适配器提供了数据   
  64.         this.eListView.setAdapter(this.adapter);  
  65.   
  66.         //  注册一个上下文菜单显示给定的视图(多个视图可以显示上下文菜单)。   
  67.         super.registerForContextMenu(this.eListView);  
  68.   
  69.         // 设置点击时候触发的事件 1,子选项点击事件 2。父选项单击事件 3.分组打开事件 4.分组关闭事件   
  70.         this.eListView.setOnChildClickListener(new ChildClickListener());  
  71.         this.eListView.setOnGroupClickListener(new GroupClickListener());  
  72.         this.eListView.setOnGroupExpandListener(new GroupExpandListener());  
  73.         this.eListView.setOnGroupCollapseListener(new GroupCollapseListener());  
  74.   
  75.     }  
  76.   
  77.     // /1,子选项点击事件   
  78.     private class ChildClickListener implements OnChildClickListener {  
  79.   
  80.         public boolean onChildClick(ExpandableListView parent, View v,  
  81.                 int groupPosition, int childPosition, long id) {  
  82.             Toast  
  83.                     .makeText(  
  84.                             MaintActivity.this,  
  85.                             "子选项被选中,所的组:" + groupPosition + "  子选项的位置:"  
  86.                                     + childPosition, Toast.LENGTH_LONG).show();  
  87.             return false;  
  88.         }  
  89.   
  90.     }  
  91.   
  92.     // 2。父选项单击事件   
  93.     private class GroupClickListener implements OnGroupClickListener {  
  94.   
  95.         public boolean onGroupClick(ExpandableListView parent, View v,  
  96.                 int groupPosition, long id) {  
  97.             Toast.makeText(MaintActivity.this"分组选项被选中,所在组: " + groupPosition,  
  98.                     Toast.LENGTH_LONG).show();  
  99.             return false;  
  100.         }  
  101.   
  102.     }  
  103.   
  104.     // 3.分组打开事件   
  105.     private class GroupExpandListener implements OnGroupExpandListener {  
  106.   
  107.         public void onGroupExpand(int groupPosition) {  
  108.             // TODO Auto-generated method stub   
  109.             Toast.makeText(MaintActivity.this"打开分组,所在组:" + groupPosition,  
  110.                     Toast.LENGTH_LONG).show();  
  111.         }  
  112.   
  113.     }  
  114.   
  115.     // 4.分组关闭事件   
  116.     private class GroupCollapseListener implements OnGroupCollapseListener {  
  117.   
  118.         public void onGroupCollapse(int groupPosition) {  
  119.             Toast.makeText(MaintActivity.this"关闭分组,所在组:" + groupPosition,  
  120.                     Toast.LENGTH_LONG).show();  
  121.         }  
  122.   
  123.     }  
  124.   
  125. }  
3.主活动的实现需要一个适配器,myExpendableadapler.java
  1. package com.wang;  
  2.   
  3. import android.content.Context;  
  4. import android.view.Gravity;  
  5. import android.view.View;  
  6. import android.view.ViewGroup;  
  7. import android.widget.AbsListView;  
  8. import android.widget.BaseExpandableListAdapter;  
  9. import android.widget.TextView;  
  10.   
  11. public class myExpendableadapler extends BaseExpandableListAdapter {  
  12.     // 组名称   
  13.     private String[] group = new String[] { "专业课""公共课""选修课""选逃课" };  
  14.     // 子选项的名字   
  15.     private String[][] child = new String[][] {  
  16.             { "C语言""java程序设计基础教程""数据库原理与应用""数据结构""linux下的嵌入式C语言编程",  
  17.                     "linux桌面应用程序设计""计算机操作系统""计算机组成原理" },  
  18.             { "大学英语""马克思哲学原理""形势与政策""ARM体系结构""嵌入式软件开发""软件工程" },  
  19.             { "音乐鉴赏""市场营销""android开发与应用""Visual C++实用教程""算法分析与程序设计" },  
  20.             { "马克思哲学原理""形势与政策" } };  
  21.     private Context context = null;  
  22.   
  23.     // 构造函数   
  24.     public myExpendableadapler(Context context) {  
  25.   
  26.         this.context = context;  
  27.     }  
  28.   
  29.     public Object getChild(int groupPosition, int childPosition) {  
  30.   
  31.         return this.child[groupPosition][childPosition];  
  32.     }  
  33.   
  34.     public long getChildId(int groupPosition, int childPosition) {  
  35.   
  36.         return childPosition;  
  37.     }  
  38.   
  39.     private TextView buildTextView() {  
  40.         //LayoutParams AbsListView扩展提供一个位置来保存视图类型。   
  41.         AbsListView.LayoutParams params = new AbsListView.LayoutParams(  
  42.                 ViewGroup.LayoutParams.FILL_PARENT, 40);  
  43.           
  44.         TextView textView = new TextView(this.context);  
  45.         textView.setLayoutParams(params);  
  46.         //大小   
  47.         textView.setTextSize(15.0f);  
  48.         textView.setGravity(Gravity.LEFT+3);  
  49.         textView.setPadding(40833);  
  50.         return textView;  
  51.     }  
  52.   
  53.     public View getChildView(int groupPosition, int childPosition,  
  54.             boolean isLastChild, View convertView, ViewGroup parent) {  
  55.         TextView textView = new TextView(this.context);  
  56.         //得到每组的子选项并转换成字符串   
  57.         textView.setText(this.getChild(groupPosition, childPosition).toString());  
  58.   
  59.         return textView;  
  60.     }  
  61. //统计子选项的个数   
  62.     public int getChildrenCount(int groupPosition) {  
  63.         // TODO Auto-generated method stub   
  64.         return this.child[groupPosition].length;  
  65.     }  
  66. //得到复选项的位置   
  67.     public Object getGroup(int groupPosition) {  
  68.         // TODO Auto-generated method stub   
  69.         return this.group[groupPosition];  
  70.     }  
  71.     //得到复选项的个数   
  72.     public int getGroupCount() {  
  73.         // TODO Auto-generated method stub   
  74.         return this.group.length;  
  75.     }  
  76.     //得到复选项的id   
  77.     public long getGroupId(int groupPosition) {  
  78.         // TODO Auto-generated method stub   
  79.         return groupPosition;  
  80.     }  
  81.   
  82.     public View getGroupView(int groupPosition, boolean isExpanded,  
  83.             View convertView, ViewGroup parent) {  
  84.         // TODO Auto-generated method stub   
  85.         TextView textView = this.buildTextView();  
  86.         textView.setText(this.getGroup(groupPosition).toString());  
  87.         return textView;  
  88.     }  
  89. //是否子选项和父选项id是稳定在改变底层数据。   
  90.     public boolean hasStableIds() {  
  91.         // TODO Auto-generated method stub   
  92.         return true;  
  93.     }  
  94. //p判断子选项是否可以选择   
  95.     public boolean isChildSelectable(int groupPosition, int childPosition) {  
  96.         // TODO Auto-generated method stub   
  97.         return true;  
  98.     }  
  99.   
  100. }  
4.接着就可以看看实现的效果了:


更多相关文章

  1. android的Touch事件解析(dispatchTouchEvent,onInterceptTouchEven
  2. android捕获js中的dialog事件
  3. Android触摸滑动全解(一)——View中触摸事件详解
  4. Android中如何模拟一次点击(touch)事件
  5. Android 中的定时事件使用
  6. android View事件体系结论总结
  7. android View长按事件简单写法
  8. android 文本框部分文字的点击事件

随机推荐

  1. 使用Android(安卓)Studio搭建Android集成
  2. 图文详解Android(安卓)Studio搭建Android
  3. 如何搭建Repo服务器端
  4. Android多进程使用及其带来的问题
  5. android多分辨力支持 密度与分辨力
  6. Android手机访问Django测试服务器方法
  7. android耳机状态的检测
  8. Android(安卓)木马应用程序大名单
  9. A015-布局之LinearLayout
  10. android横竖屏切换