TextSwitcher, Gallery, ImageSwitcher, GridView, ListView, ExpandableList

介绍
在 Android 中使用各种控件(View)
TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)
Gallery - 缩略图浏览器控件
ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)
GridView - 网格控件
ListView - 列表控件
ExpandableList - 支持展开/收缩功能的列表控件

Java代码 复制代码
  1. 1、TextSwitcher 的 Demo   
  2. textswitcher.xml    
  3.   
  4. 代码    
  5. <?xml version="1.0" encoding="utf-8"?>   
  6. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  7.     android:orientation="vertical" android:layout_width="fill_parent"  
  8.     android:layout_height="fill_parent">   
  9.   
  10.     <Button android:id="@+id/btnChange" android:layout_width="wrap_content"  
  11.         android:layout_height="wrap_content" android:text="改变文字" />   
  12.   
  13.     <!--   
  14.         TextSwitcher - 文字转换器控件(改变文字时增加一些动画效果)   
  15.     -->   
  16.     <TextSwitcher android:id="@+id/textSwitcher"  
  17.         android:layout_width="fill_parent" android:layout_height="wrap_content" />   
  18.   
  19. </LinearLayout>   
  20.   
  21.   
  22. _TextSwitcher.java   
  23.   
  24. 代码    
  25. package com.webabcd.view;   
  26.   
  27. import java.util.Random;   
  28.   
  29. import android.app.Activity;   
  30. import android.os.Bundle;   
  31. import android.view.View;   
  32. import android.view.animation.Animation;   
  33. import android.view.animation.AnimationUtils;   
  34. import android.widget.Button;   
  35. import android.widget.TextSwitcher;   
  36. import android.widget.TextView;   
  37. import android.widget.ViewSwitcher;   
  38.   
  39. public class _TextSwitcher extends Activity implements ViewSwitcher.ViewFactory {   
  40.   
  41.     @Override  
  42.     protected void onCreate(Bundle savedInstanceState) {   
  43.         // TODO Auto-generated method stub   
  44.         super.onCreate(savedInstanceState);   
  45.         this.setContentView(R.layout.textswithcer);   
  46.   
  47.         setTitle("TextSwithcer");   
  48.   
  49.         final TextSwitcher switcher = (TextSwitcher) findViewById(R.id.textSwitcher);   
  50.         // 指定转换器的 ViewSwitcher.ViewFactory   
  51.         switcher.setFactory(this);   
  52.            
  53.         // 设置淡入和淡出的动画效果   
  54.         Animation in = AnimationUtils.loadAnimation(this, android.R.anim.fade_in);   
  55.         Animation out = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);   
  56.         switcher.setInAnimation(in);   
  57.         switcher.setOutAnimation(out);   
  58.   
  59.         // 单击一次按钮改变一次文字   
  60.         Button btnChange = (Button) this.findViewById(R.id.btnChange);   
  61.         btnChange.setOnClickListener(new View.OnClickListener() {   
  62.             @Override  
  63.             public void onClick(View v) {   
  64.                 switcher.setText(String.valueOf(new Random().nextInt()));   
  65.             }   
  66.         });   
  67.     }   
  68.   
  69.     // 重写 ViewSwitcher.ViewFactory 的 makeView(),返回一个 View   
  70.     @Override  
  71.     public View makeView() {   
  72.         TextView textView = new TextView(this);   
  73.         textView.setTextSize(36);   
  74.         return textView;   
  75.     }   
  76. }   
  77.   
  78.   
  79.   
  80. 2、Gallery 的 Demo   
  81. gallery.xml   
  82.   
  83. 代码    
  84. <?xml version="1.0" encoding="utf-8"?>   
  85. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  86.     android:orientation="vertical" android:layout_width="fill_parent"  
  87.     android:layout_height="fill_parent">   
  88.   
  89.     <!--   
  90.         Gallery - 缩略图浏览器控件   
  91.             spacing - 缩略图列表中各个缩略图之间的间距   
  92.     -->   
  93.     <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"  
  94.         android:layout_height="wrap_content" android:spacing="20px" />   
  95.   
  96. </LinearLayout>   
  97.   
  98.   
  99. _Gallery.java   
  100.   
  101. 代码    
  102. package com.webabcd.view;   
  103.   
  104. import android.app.Activity;   
  105. import android.content.Context;   
  106. import android.os.Bundle;   
  107. import android.view.View;   
  108. import android.view.ViewGroup;   
  109. import android.widget.AdapterView;   
  110. import android.widget.BaseAdapter;   
  111. import android.widget.Gallery;   
  112. import android.widget.ImageView;   
  113. import android.widget.Toast;   
  114. import android.widget.Gallery.LayoutParams;   
  115.   
  116. public class _Gallery extends Activity {   
  117.   
  118.     @Override  
  119.     protected void onCreate(Bundle savedInstanceState) {   
  120.         // TODO Auto-generated method stub   
  121.         super.onCreate(savedInstanceState);   
  122.         this.setContentView(R.layout.gallery);   
  123.   
  124.         setTitle("Gallery");   
  125.   
  126.         Gallery gallery = (Gallery) findViewById(R.id.gallery);   
  127.         // 为缩略图浏览器指定一个适配器   
  128.         gallery.setAdapter(new ImageAdapter(this));   
  129.         // 响应 在缩略图列表上选中某个缩略图后的 事件   
  130.         gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {   
  131.             @Override  
  132.             public void onItemSelected(AdapterView<?> parent, View v,   
  133.                     int position, long id) {   
  134.                 Toast.makeText(_Gallery.this, String.valueOf(position), Toast.LENGTH_SHORT).show();   
  135.             }   
  136.   
  137.             @Override  
  138.             public void onNothingSelected(AdapterView<?> arg0) {   
  139.   
  140.             }   
  141.         });   
  142.     }   
  143.   
  144.     // 继承 BaseAdapter 用以实现自定义的图片适配器   
  145.     public class ImageAdapter extends BaseAdapter {   
  146.   
  147.         private Context mContext;   
  148.   
  149.         public ImageAdapter(Context context) {   
  150.             mContext = context;   
  151.         }   
  152.   
  153.         public int getCount() {   
  154.             return mThumbIds.length;   
  155.         }   
  156.   
  157.         public Object getItem(int position) {   
  158.             return position;   
  159.         }   
  160.   
  161.         public long getItemId(int position) {   
  162.             return position;   
  163.         }   
  164.   
  165.         public View getView(int position, View convertView, ViewGroup parent) {   
  166.             ImageView image = new ImageView(mContext);   
  167.   
  168.             image.setImageResource(mThumbIds[position]);   
  169.             image.setAdjustViewBounds(true);   
  170.             image.setLayoutParams(new Gallery.LayoutParams(   
  171.                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));   
  172.   
  173.             return image;   
  174.         }   
  175.     }   
  176.   
  177.     // 需要显示的图片集合   
  178.     private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,   
  179.             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };   
  180. }   
  181.   
  182.   
  183.   
  184. 3、ImageSwitcher 的 Demo   
  185. imageswitcher.xml   
  186.   
  187. 代码    
  188. <?xml version="1.0" encoding="utf-8"?>   
  189. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  190.     android:orientation="vertical" android:layout_width="fill_parent"  
  191.     android:layout_height="fill_parent">   
  192.   
  193.     <Gallery android:id="@+id/gallery" android:layout_width="fill_parent"  
  194.         android:layout_height="wrap_content" android:spacing="20px" />   
  195.   
  196.     <!--   
  197.         ImageSwitcher - 图片转换器控件(改变图片时增加一些动画效果)   
  198.     -->   
  199.     <ImageSwitcher android:id="@+id/imageSwitcher"  
  200.         android:layout_width="fill_parent" android:layout_height="wrap_content" />   
  201.   
  202. </LinearLayout>   
  203.   
  204.   
  205. _ImageSwitcher.java   
  206.   
  207. 代码    
  208. package com.webabcd.view;   
  209.   
  210. import android.app.Activity;   
  211. import android.content.Context;   
  212. import android.os.Bundle;   
  213. import android.view.View;   
  214. import android.view.ViewGroup;   
  215. import android.view.animation.AnimationUtils;   
  216. import android.widget.AdapterView;   
  217. import android.widget.BaseAdapter;   
  218. import android.widget.Gallery;   
  219. import android.widget.ImageSwitcher;   
  220. import android.widget.ImageView;   
  221. import android.widget.ViewSwitcher;   
  222. import android.widget.Gallery.LayoutParams;   
  223.   
  224. // 图片转换器的使用基本同文字转换器   
  225. // 以下是一个用 ImageSwitcher + Gallery 实现的经典的图片浏览器的 Demo   
  226. public class _ImageSwitcher extends Activity implements  
  227.         ViewSwitcher.ViewFactory {   
  228.   
  229.     private ImageSwitcher mSwitcher;   
  230.   
  231.     @Override  
  232.     protected void onCreate(Bundle savedInstanceState) {   
  233.         // TODO Auto-generated method stub   
  234.         super.onCreate(savedInstanceState);   
  235.         this.setContentView(R.layout.imageswithcer);   
  236.   
  237.         setTitle("ImageSwithcer");   
  238.   
  239.         mSwitcher = (ImageSwitcher) findViewById(R.id.imageSwitcher);   
  240.         mSwitcher.setFactory(this);   
  241.         mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,   
  242.                 android.R.anim.fade_in));   
  243.         mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,   
  244.                 android.R.anim.fade_out));   
  245.   
  246.         Gallery gallery = (Gallery) findViewById(R.id.gallery);   
  247.         gallery.setAdapter(new ImageAdapter(this));   
  248.         gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {   
  249.             @Override  
  250.             public void onItemSelected(AdapterView<?> parent, View v,   
  251.                     int position, long id) {   
  252.                 mSwitcher.setImageResource(mImageIds[position]);   
  253.             }   
  254.   
  255.             @Override  
  256.             public void onNothingSelected(AdapterView<?> arg0) {   
  257.   
  258.             }   
  259.         });   
  260.     }   
  261.   
  262.     public class ImageAdapter extends BaseAdapter {   
  263.   
  264.         private Context mContext;   
  265.   
  266.         public ImageAdapter(Context context) {   
  267.             mContext = context;   
  268.         }   
  269.   
  270.         public int getCount() {   
  271.             return mThumbIds.length;   
  272.         }   
  273.   
  274.         public Object getItem(int position) {   
  275.             return position;   
  276.         }   
  277.   
  278.         public long getItemId(int position) {   
  279.             return position;   
  280.         }   
  281.   
  282.         public View getView(int position, View convertView, ViewGroup parent) {   
  283.             ImageView image = new ImageView(mContext);   
  284.   
  285.             image.setImageResource(mThumbIds[position]);   
  286.             image.setAdjustViewBounds(true);   
  287.             image.setLayoutParams(new Gallery.LayoutParams(   
  288.                     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));   
  289.   
  290.             return image;   
  291.         }   
  292.     }   
  293.   
  294.     private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,   
  295.             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };   
  296.   
  297.     private Integer[] mImageIds = { R.drawable.icon01, R.drawable.icon02,   
  298.             R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };   
  299.   
  300.     @Override  
  301.     public View makeView() {   
  302.         ImageView image = new ImageView(this);   
  303.         image.setMinimumHeight(200);   
  304.         image.setMinimumWidth(200);   
  305.         image.setScaleType(ImageView.ScaleType.FIT_CENTER);   
  306.         image.setLayoutParams(new ImageSwitcher.LayoutParams(   
  307.                 LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));   
  308.         return image;   
  309.     }   
  310. }   
  311.   
  312.   
  313.   
  314. 4、GridView 的 Demo   
  315. gridview.xml   
  316.   
  317. 代码    
  318. <?xml version="1.0" encoding="utf-8"?>   
  319.   
  320. <!--   
  321.     GridView - 网格控件   
  322.         numColumns="auto_fit" - 列数自适应   
  323.         stretchMode - 缩放模式(stretchMode="columnWidth" - 缩放与列宽大小同步)   
  324. -->   
  325. <GridView xmlns:android="http://schemas.android.com/apk/res/android"  
  326.     android:id="@+id/gridView" android:layout_width="fill_parent"  
  327.     android:layout_height="fill_parent" android:padding="10px"  
  328.     android:verticalSpacing="10px" android:horizontalSpacing="10px"  
  329.     android:numColumns="auto_fit" android:columnWidth="60px"  
  330.     android:stretchMode="columnWidth" android:gravity="center">   
  331. </GridView>   
  332.   
  333.   
  334. _GridView.java   
  335.   
  336. 代码    
  337. package com.webabcd.view;   
  338.   
  339. import android.app.Activity;   
  340. import android.content.Context;   
  341. import android.os.Bundle;   
  342. import android.view.View;   
  343. import android.view.ViewGroup;   
  344. import android.widget.BaseAdapter;   
  345. import android.widget.GridView;   
  346. import android.widget.ImageView;   
  347.   
  348. public class _GridView extends Activity {   
  349.   
  350.     @Override  
  351.     protected void onCreate(Bundle savedInstanceState) {   
  352.         // TODO Auto-generated method stub   
  353.         super.onCreate(savedInstanceState);   
  354.         this.setContentView(R.layout.gridview);   
  355.   
  356.         setTitle("GridView");   
  357.   
  358.         GridView gridView = (GridView) findViewById(R.id.gridView);   
  359.         // 指定网格控件的适配器为自定义的图片适配器   
  360.         gridView.setAdapter(new ImageAdapter(this));   
  361.     }   
  362.   
  363.     // 自定义的图片适配器   
  364.     public class ImageAdapter extends BaseAdapter {   
  365.   
  366.         private Context mContext;   
  367.   
  368.         public ImageAdapter(Context context) {   
  369.             mContext = context;   
  370.         }   
  371.   
  372.         public int getCount() {   
  373.             return mThumbIds.length;   
  374.         }   
  375.   
  376.         public Object getItem(int position) {   
  377.             return position;   
  378.         }   
  379.   
  380.         public long getItemId(int position) {   
  381.             return position;   
  382.         }   
  383.   
  384.         public View getView(int position, View convertView, ViewGroup parent) {   
  385.             ImageView imageView;   
  386.             if (convertView == null) {   
  387.                 imageView = new ImageView(mContext);   
  388.                 imageView.setLayoutParams(new GridView.LayoutParams(4848));   
  389.                 imageView.setAdjustViewBounds(false);   
  390.                 imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);   
  391.                 imageView.setPadding(5555);   
  392.             } else {   
  393.                 imageView = (ImageView) convertView;   
  394.             }   
  395.   
  396.             imageView.setImageResource(mThumbIds[position]);   
  397.   
  398.             return imageView;   
  399.         }   
  400.   
  401.         // 网格控件所需图片数据的数据源   
  402.         private Integer[] mThumbIds = { R.drawable.icon01, R.drawable.icon02,   
  403.                 R.drawable.icon03, R.drawable.icon04, R.drawable.icon05 };   
  404.     }   
  405. }   
  406.   
  407.   
  408.   
  409. 5、ListView 的 Demo   
  410. main_list_adapter.xml   
  411.   
  412. 代码    
  413. <?xml version="1.0" encoding="utf-8"?>   
  414. <!--   
  415.     自定义列表适配器的 layout   
  416. -->   
  417. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  418.     android:orientation="horizontal" android:layout_width="fill_parent"  
  419.     android:layout_height="fill_parent">   
  420.        
  421.     <TextView android:id="@+id/text" android:layout_width="wrap_content"  
  422.         android:layout_height="wrap_content" android:textSize="16sp">   
  423.     </TextView>   
  424.        
  425. </LinearLayout>   
  426.   
  427.   
  428. MainListAdapter.java   
  429.   
  430. 代码    
  431. package com.webabcd.view;   
  432.   
  433. import java.util.List;   
  434.   
  435. import android.content.Context;   
  436. import android.view.LayoutInflater;   
  437. import android.view.View;   
  438. import android.view.ViewGroup;   
  439. import android.widget.BaseAdapter;   
  440. import android.widget.TextView;   
  441.   
  442. // 继承 BaseAdapter 以实现自定义的列表适配器   
  443. public class MainListAdapter extends BaseAdapter {   
  444.   
  445.     private LayoutInflater mInflater;   
  446.     private List<String> mData;   
  447.   
  448.     public MainListAdapter(Context context, List<String> data) {   
  449.         mInflater = LayoutInflater.from(context);   
  450.         mData = data;   
  451.     }   
  452.   
  453.     @Override  
  454.     public int getCount() {   
  455.         return mData.size();   
  456.     }   
  457.   
  458.     @Override  
  459.     public Object getItem(int position) {   
  460.         return mData.get(position);   
  461.     }   
  462.   
  463.     @Override  
  464.     public long getItemId(int position) {   
  465.         return position;   
  466.     }   
  467.   
  468.     @Override  
  469.     public View getView(int position, View convertView, ViewGroup parent) {   
  470.   
  471.         TextView text;   
  472.   
  473.         if (convertView == null) {   
  474.             // 指定一个 layout 作为自定义列表适配器的 layout   
  475.             convertView = mInflater.inflate(R.layout.main_list_adapter, null);   
  476.             text = (TextView) convertView.findViewById(R.id.text);   
  477.             convertView.setTag(text);   
  478.         } else {   
  479.             text = (TextView) convertView.getTag();   
  480.         }   
  481.            
  482.         String mItem = mData.get(position);   
  483.         text.setText(mItem);   
  484.            
  485.         return convertView;   
  486.     }   
  487. }   
  488.   
  489. Main.java   
  490.   
  491. 代码    
  492. package com.webabcd.view;   
  493.   
  494. import java.util.ArrayList;   
  495. import java.util.List;   
  496.   
  497. import android.app.ListActivity;   
  498. import android.content.Intent;   
  499. import android.os.Bundle;   
  500. import android.view.View;   
  501. import android.widget.ListView;   
  502.   
  503. // 此处要继承 ListActivity ,用以实现 ListView 的功能   
  504. public class Main extends ListActivity {   
  505.        
  506.     private List<String> mData;   
  507.        
  508.     /** Called when the activity is first created. */  
  509.     @Override  
  510.     public void onCreate(Bundle savedInstanceState) {   
  511.         super.onCreate(savedInstanceState);   
  512.   
  513.         setTheme(android.R.style.Theme_Light);   
  514.         setContentView(R.layout.main);           
  515.         mData = getData();   
  516.            
  517.         // 使用自定义的列表适配器来展现数据   
  518.         MainListAdapter adapter = new MainListAdapter(this, mData);   
  519.            
  520.         // 如需使用系统内置的列表适配器,则可以使用类似如下的方法   
  521.         // ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_expandable_list_item_1, mData);   
  522.            
  523.         this.setListAdapter(adapter);   
  524.     }   
  525.   
  526.     // ListView 的数据源   
  527.     private List<String> getData()    {   
  528.         List<String> items = new ArrayList<String>();   
  529.            
  530.         items.add("TextView");   
  531.         items.add("Button");   
  532.         items.add("ImageButton");   
  533.         items.add("ImageView");   
  534.         items.add("CheckBox");   
  535.         items.add("RadioButton");   
  536.         items.add("AnalogClock");   
  537.         items.add("DigitalClock");   
  538.         items.add("DatePicker");   
  539.         items.add("TimePicker");   
  540.         items.add("ToggleButton");   
  541.         items.add("EditText");   
  542.         items.add("ProgressBar");   
  543.         items.add("SeekBar");   
  544.         items.add("AutoCompleteTextView");   
  545.         items.add("MultiAutoCompleteTextView");   
  546.         items.add("ZoomControls");   
  547.         items.add("Include");   
  548.         items.add("VideoView");   
  549.         items.add("WebView");   
  550.         items.add("RatingBar");   
  551.         items.add("Tab");   
  552.         items.add("Spinner");   
  553.         items.add("Chronometer");   
  554.         items.add("ScrollView");   
  555.         items.add("TextSwitcher");   
  556.         items.add("ListView");   
  557.         items.add("Gallery");   
  558.         items.add("ImageSwitcher");   
  559.         items.add("GridView");   
  560.         items.add("ExpandableList");   
  561.             
  562.         return items;   
  563.     }   
  564.   
  565.     // ListView 中某项被选中后的逻辑   
  566.     @Override  
  567.     protected void onListItemClick(ListView l, View v, int position, long id) {   
  568.         Intent intent = new Intent();   
  569.         intent.setClassName(this"com.webabcd.view._" + mData.get(position));   
  570.   
  571.         startActivityForResult(intent, 0);   
  572.     }   
  573. }   
  574.   
  575.   
  576. 6、ExpandableList 的 Demo   
  577. _ExpandableList.java   
  578.   
  579. 代码    
  580. package com.webabcd.view;   
  581.   
  582. import android.app.ExpandableListActivity;   
  583. import android.os.Bundle;   
  584. import android.view.ContextMenu;   
  585. import android.view.Gravity;   
  586. import android.view.MenuItem;   
  587. import android.view.View;   
  588. import android.view.ViewGroup;   
  589. import android.view.ContextMenu.ContextMenuInfo;   
  590. import android.widget.AbsListView;   
  591. import android.widget.BaseExpandableListAdapter;   
  592. import android.widget.ExpandableListAdapter;   
  593. import android.widget.ExpandableListView;   
  594. import android.widget.TextView;   
  595. import android.widget.Toast;   
  596. import android.widget.ExpandableListView.ExpandableListContextMenuInfo;   
  597.   
  598. // ExpandableList - 可展开/收缩列表   
  599. // 继承 ExpandableListActivity 以实现列表的可展开/收缩的功能   
  600. public class _ExpandableList extends ExpandableListActivity {   
  601.        
  602.     private ExpandableListAdapter mAdapter;   
  603.   
  604.     @Override  
  605.     protected void onCreate(Bundle savedInstanceState) {   
  606.         // TODO Auto-generated method stub   
  607.         super.onCreate(savedInstanceState);   
  608.   
  609.         setTitle("ExpandableList");   
  610.            
  611.         mAdapter = new MyExpandableListAdapter();   
  612.         setListAdapter(mAdapter);   
  613.         registerForContextMenu(this.getExpandableListView());   
  614.     }   
  615.   
  616.     // 为列表的每一项创建上下文菜单(即长按后呼出的菜单)    
  617.     @Override  
  618.     public void onCreateContextMenu(ContextMenu menu, View v,   
  619.             ContextMenuInfo menuInfo) {   
  620.         menu.setHeaderTitle("ContextMenu");   
  621.         menu.add(000"ContextMenu");   
  622.     }   
  623.   
  624.     // 单击上下文菜单后的逻辑   
  625.     @Override  
  626.     public boolean onContextItemSelected(MenuItem item) {   
  627.         ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) item.getMenuInfo();   
  628.         String title = ((TextView) info.targetView).getText().toString();   
  629.   
  630.         int type = ExpandableListView.getPackedPositionType(info.packedPosition);   
  631.         if (type == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {   
  632.             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
  633.             int childPos = ExpandableListView.getPackedPositionChild(info.packedPosition);   
  634.                
  635.             Toast.makeText(this, title + " - Group Index: " + groupPos + " Child Index: " + childPos, Toast.LENGTH_SHORT).show();   
  636.                
  637.             return true;   
  638.         } else if (type == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {   
  639.             int groupPos = ExpandableListView.getPackedPositionGroup(info.packedPosition);   
  640.             Toast.makeText(this, title + " - Group Index: " + groupPos, Toast.LENGTH_SHORT).show();   
  641.                
  642.             return true;   
  643.         }   
  644.   
  645.         return false;   
  646.     }   
  647.   
  648.     public class MyExpandableListAdapter extends BaseExpandableListAdapter {   
  649.   
  650.         // 父列表数据   
  651.         private String[] groups =    
  652.         {    
  653.             "group1",    
  654.             "group2",    
  655.             "group3",   
  656.             "group4"    
  657.         };   
  658.         // 子列表数据   
  659.         private String[][] children =    
  660.         {   
  661.             { "child1" },   
  662.             { "child1""child2" },   
  663.             { "child1""child2""child3" },   
  664.             { "child1""child2""child3""child4" }   
  665.         };   
  666.            
  667.         @Override  
  668.         public Object getChild(int groupPosition, int childPosition) {   
  669.             return children[groupPosition][childPosition];   
  670.         }   
  671.   
  672.         @Override  
  673.         public long getChildId(int groupPosition, int childPosition) {   
  674.             return childPosition;   
  675.         }   
  676.   
  677.         @Override  
  678.         public int getChildrenCount(int groupPosition) {   
  679.             return children[groupPosition].length;   
  680.         }   
  681.   
  682.         // 取子列表中的某一项的 View   
  683.         @Override  
  684.         public View getChildView(int groupPosition, int childPosition,   
  685.                 boolean isLastChild, View convertView, ViewGroup parent) {   
  686.             TextView textView = getGenericView();   
  687.             textView.setText(getChild(groupPosition, childPosition).toString());   
  688.             return textView;   
  689.         }   
  690.   
  691.         @Override  
  692.         public Object getGroup(int groupPosition) {   
  693.             return groups[groupPosition];   
  694.         }   
  695.   
  696.         @Override  
  697.         public int getGroupCount() {   
  698.             return groups.length;   
  699.         }   
  700.   
  701.         @Override  
  702.         public long getGroupId(int groupPosition) {   
  703.             return groupPosition;   
  704.         }   
  705.   
  706.         // 取父列表中的某一项的 View   
  707.         @Override  
  708.         public View getGroupView(int groupPosition, boolean isExpanded,   
  709.                 View convertView, ViewGroup parent) {   
  710.             TextView textView = getGenericView();   
  711.             textView.setText(getGroup(groupPosition).toString());   
  712.             return textView;   
  713.         }   
  714.   
  715.         @Override  
  716.         public boolean hasStableIds() {   
  717.             return true;   
  718.         }   
  719.   
  720.         @Override  
  721.         public boolean isChildSelectable(int groupPosition, int childPosition) {   
  722.             return true;   
  723.         }   
  724.                    
  725.         // 获取某一项的 View 的逻辑   
  726.         private TextView getGenericView() {   
  727.             AbsListView.LayoutParams lp = new AbsListView.LayoutParams(   
  728.                     ViewGroup.LayoutParams.FILL_PARENT, 48);   
  729.             TextView textView = new TextView(_ExpandableList.this);   
  730.             textView.setLayoutParams(lp);   
  731.             textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);   
  732.             textView.setPadding(32000);   
  733.             return textView;   
  734.         }   
  735.     }   
  736. }  

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值