ExpandableListView組件詳解

直接上圖:

 

 

 

代碼:

定義是適配器

 

  1. package com.wsl.expandablelistview;  
  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 MyExpandableListAdapter extends BaseExpandableListAdapter {  
  12.  
  13.     private String[] groups={"我的好友","家人","同事","高中同學","初中同學"};  
  14.     private String[][] children={{"王明","李樂","劉衝","盧廣名"},{"王明","李樂","劉衝","盧廣名"},{"王明","李樂","劉衝","盧廣名"},{"王明","李樂","劉衝","盧廣名"}};  
  15.       
  16.     private Context context=null;  
  17.       
  18.     public MyExpandableListAdapter(Context context){  
  19.         this.context=context;  
  20.     }  
  21.       
  22.     public Object getChild(int groupPosition, int childPosition) {  
  23.         // TODO Auto-generated method stub  
  24.         return this.children[groupPosition][childPosition];  
  25.     }  
  26.  
  27.     public long getChildId(int groupPosition, int childPosition) {  
  28.         // TODO Auto-generated method stub  
  29.           
  30.         return childPosition;  
  31.     }  
  32.       
  33.       
  34.     public TextView buildTextView(){  
  35.           
  36.         AbsListView.LayoutParams param=new AbsListView.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 35);  
  37.         TextView textview=new TextView(this.context);  
  38.         textview.setLayoutParams(param);  
  39.         textview.setTextSize(15.0f);  
  40.         textview.setGravity(Gravity.LEFT);  
  41.         textview.setPadding(40, 8, 3, 3);  
  42.           
  43.         return textview;  
  44.           
  45.     }  
  46.       
  47.       
  48.       
  49.  
  50.     public View getChildView(int groupPosition, int childPosition,  
  51.             boolean isLastChild, View convertView, ViewGroup parent) {  
  52.         // TODO Auto-generated method stub  
  53.         TextView textView=buildTextView();  
  54.         textView.setText(getChild(groupPosition, childPosition).toString());  
  55.         return textView;  
  56.     }  
  57.  
  58.     public int getChildrenCount(int groupPosition) {  
  59.         // TODO Auto-generated method stub  
  60.         return this.children[groupPosition].length;  
  61.     }  
  62.  
  63.     public Object getGroup(int groupPosition) {  
  64.         // TODO Auto-generated method stub  
  65.         return this.groups[groupPosition];  
  66.     }  
  67.  
  68.     public int getGroupCount() {  
  69.         // TODO Auto-generated method stub  
  70.         return groups.length;  
  71.     }  
  72.  
  73.     public long getGroupId(int groupPosition) {  
  74.         // TODO Auto-generated method stub  
  75.         return groupPosition;  
  76.     }  
  77.  
  78.     public View getGroupView(int groupPosition, boolean isExpanded,  
  79.             View convertView, ViewGroup parent) {  
  80.         // TODO Auto-generated method stub  
  81.         TextView textview=buildTextView();  
  82.         textview.setText(this.getGroup(groupPosition).toString());  
  83.         return textview;  
  84.           
  85.     }  
  86.  
  87.     public boolean hasStableIds() {  
  88.         // TODO Auto-generated method stub  
  89.         return true;  
  90.     }  
  91.  
  92.     public boolean isChildSelectable(int groupPosition, int childPosition) {  
  93.         // TODO Auto-generated method stub  
  94.         return true;  
  95.     }  
  96.  
  97. }  

 

 

定義佈局管理器

 

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  2.     xmlns:tools="http://schemas.android.com/tools" 
  3.     android:orientation="vertical" 
  4.     android:layout_width="fill_parent" 
  5.     android:layout_height="fill_parent" > 
  6.  
  7.     <ExpandableListView 
  8.         android:id="@+id/elistview" 
  9.         android:layout_width="fill_parent" 
  10.         android:layout_height="wrap_content" 
  11.         /> 
  12.  
  13. </LinearLayout> 

定義Activity

 

  1. package com.wsl.expandablelistview;  
  2.  
  3. import android.os.Bundle;  
  4. import android.app.Activity;  
  5. import android.view.ContextMenu;  
  6. import android.view.Menu;  
  7. import android.view.View;  
  8. import android.view.ContextMenu.ContextMenuInfo;  
  9. import android.widget.ExpandableListAdapter;  
  10. import android.widget.ExpandableListView;  
  11.  
  12. import android.widget.ExpandableListView.OnChildClickListener;  
  13. import android.widget.ExpandableListView.OnGroupClickListener;  
  14. import android.widget.ExpandableListView.OnGroupCollapseListener;  
  15. import android.widget.ExpandableListView.OnGroupExpandListener;  
  16. import android.widget.Toast;  
  17.  
  18. public class MainActivity extends Activity {  
  19.  
  20.       
  21.     private ExpandableListView elistview=null;  
  22.     private ExpandableListAdapter adapter=null;  
  23.     @Override  
  24.     public void onCreate(Bundle savedInstanceState) {  
  25.         super.onCreate(savedInstanceState);  
  26.         setContentView(R.layout.activity_main);  
  27.           
  28.         this.elistview=(ExpandableListView) super.findViewById(R.id.elistview);  
  29.         this.adapter=new MyExpandableListAdapter(this);  
  30.           
  31.         this.elistview.setAdapter(adapter);  
  32.         registerForContextMenu(this.elistview);  
  33.           
  34.         this.elistview.setOnChildClickListener(new OnChildClickListenerImpl());  
  35.         this.elistview.setOnGroupClickListener(new OnGroupClickListenerImpl());  
  36.         this.elistview.setOnGroupCollapseListener(new OnGroupCollapseListenerImpl());  
  37.         this.elistview.setOnGroupExpandListener(new OnGroupExpandListenerImpl());  
  38.     }  
  39.       
  40.       
  41.     private class OnChildClickListenerImpl implements OnChildClickListener{  
  42.  
  43.         public boolean onChildClick(ExpandableListView parent, View v,  
  44.                 int groupPosition, int childPosition, long id) {  
  45.               
  46.             Toast.makeText(MainActivity.this, "分組被選中,groupposition"+childPosition+",childPosition="+childPosition, Toast.LENGTH_LONG).show();  
  47.             return false;  
  48.         }  
  49.           
  50.     }  
  51.       
  52.     private class OnGroupClickListenerImpl implements OnGroupClickListener{  
  53.  
  54.         public boolean onGroupClick(ExpandableListView parent, View v,  
  55.                 int groupPosition, long id) {  
  56.             // TODO Auto-generated method stub  
  57.             Toast.makeText(MainActivity.this, "分組被選中,groupposition"+groupPosition, Toast.LENGTH_LONG).show();  
  58.             return false;  
  59.         }  
  60.           
  61.     }  
  62.       
  63.       
  64.     public class OnGroupCollapseListenerImpl implements OnGroupCollapseListener{  
  65.  
  66.         public void onGroupCollapse(int groupPosition) {  
  67.             // TODO Auto-generated method stub  
  68.             Toast.makeText(MainActivity.this, "關閉分組,groupposition"+groupPosition, Toast.LENGTH_LONG).show();  
  69.         }  
  70.           
  71.     }  
  72.       
  73.       
  74.     public class OnGroupExpandListenerImpl implements OnGroupExpandListener{  
  75.  
  76.         public void onGroupExpand(int groupPosition) {  
  77.             // TODO Auto-generated method stub  
  78.             Toast.makeText(MainActivity.this, "打開分組,groupposition"+groupPosition, Toast.LENGTH_LONG).show();  
  79.         }  
  80.           
  81.     }   
  82.  
  83.       
  84.     @Override  
  85.     public void onCreateContextMenu(ContextMenu menu, View v,  
  86.             ContextMenuInfo menuInfo) {  
  87.         // TODO Auto-generated method stub  
  88.         super.onCreateContextMenu(menu, v, menuInfo);  
  89.           
  90.         ExpandableListView.ExpandableListContextMenuInfo info=  
  91.                 (ExpandableListView.ExpandableListContextMenuInfo) menuInfo;  
  92.           
  93.         int type=ExpandableListView.getPackedPositionType(info.packedPosition);  
  94.         int group=ExpandableListView.getPackedPositionGroup(info.packedPosition);  
  95.         int child=ExpandableListView.getPackedPositionChild(info.packedPosition);  
  96.           
  97.         Toast.makeText(MainActivity.this, "type="+type+";group"+group+";child="+child, Toast.LENGTH_LONG);  
  98.     }  
  99.       
  100.       
  101.       
  102.     @Override  
  103.     public boolean onCreateOptionsMenu(Menu menu) {  
  104.         getMenuInflater().inflate(R.menu.activity_main, menu);  
  105.         return true;  
  106.     }  
  107. }  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章