歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.接著就可以看看實現的效果了:

Copyright © Linux教程網 All Rights Reserved