Android中的二级列表的应用

看看今天实现的 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.接着就可以看看实现的效果了:


你可能感兴趣的:(Android)