android ExpandableListView

来源:互联网 发布:网络语鬼畜啥意思 编辑:程序博客网 时间:2024/05/18 02:58
 

今天给大家讲讲android的目录实现方法,就像大家看到的小说目录一样,android 提供了ExpandableListView控件可以实现二级列表展示效果,现在给大家讲讲这个控件的用法,下面是XML定义:

view plaincopy to clipboardprint?
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:orientation="vertical"  
  7.     android:background="#FFFFFF"  
  8.   >  
  9.   <ExpandableListView  
  10.        android:id="@+id/elv_journal_catalog"  
  11.        android:layout_height="fill_parent"  
  12.        android:layout_width="fill_parent"  
  13.        android:cacheColorHint="#FFFFFF"  
  14.        />  
  15. </LinearLayout>  

这代码很简单,和写listView的方法差不多,接下来是ExpandableListView在activity中的代码:

view plaincopy to clipboardprint?
  1. private ExpandableListView elv_journal_catalog;  
  2. private List<List<Article>> childrenObj;  
  3.         private JournalCatalogListAdapter adapter;  
  4. public void onCreate(Bundle savedInstanceState) {  
  5.     super.onCreate(savedInstanceState);  
  6.     setContentView(R.layout.journal_catalog);  
  7.     init();  
  8.     elv_journal_catalog.setGroupIndicator(null);  
  9.     elv_journal_catalog.setDivider(null);  
  10.   
  11.     loadData();  
  12. }  
  13.   
  14. private void init() {  
  15.     elv_journal_catalog = (ExpandableListView) findViewById(R.id.elv_journal_catalog);  
  16.     elv_journal_catalog.setOnChildClickListener(listener);  
  17. }  
  18. private void loadData() {  
  19.     Message msg = handler.obtainMessage();  
  20.     msg.what = 1;  
  21.     msg.sendToTarget();  
  22.   
  23.     childrenObj = new ArrayList<List<Article>>();  
  24.     new Thread() {  
  25.   
  26.         @Override  
  27.         public void run() {  
  28.             if (!isLoading) {  
  29.                 queryArticleList();  
  30.             } else {  
  31.                 queryArticleListFromSqlite();  
  32.             }  
  33.         }  
  34.   
  35.     }.start();  
  36.   
  37.     adapter = new JournalCatalogListAdapter(this, childrenObj);  
  38.     elv_journal_catalog.setAdapter(adapter);  
  39. }  

ExpandableListView展示数据的时候默认是每个模块下的列表项是闭合状态的,如果要实现初始化的时候就展开可以通过ExpandableListView.expandGroup(location)方法来实现,而且每个父级列表项左边会出现一个系统自带的图标,这个图标是用来表示列表展开和闭合的状态的,如果不显示或者要替换这个图标可以用ExpandableListView.setGroupIndicator(Drawable icon)方法来实现,我这里是直接是没有使用任何图标,你也可以在adapter中自己在xml中定义自己的图标.

ExpandableListView填充数据需要是二级菜单的模式所以数据结构大家可以根据项目情况而定,我这里由于标题是定死的所以只传的每个标题下的数据,下面是JournalCatalogListAdapter的代码:

view plaincopy to clipboardprint?
  1. public class JournalCatalogListAdapter extends BaseExpandableListAdapter {  
  2.   
  3.     private LayoutInflater inflater;  
  4.   
  5.     private String[] parent = new String[] { "美颜美体""潮流单品""娱乐八卦""情感",  
  6.             "观点""健康生活" };  
  7.   
  8.     private List<List<Article>> clildren = new ArrayList<List<Article>>();  
  9.   
  10.     public JournalCatalogListAdapter(Context context,  
  11.             List<List<Article>> clildren) {  
  12.         this.clildren = clildren;  
  13.         inflater = LayoutInflater.from(context);  
  14.     }  
  15.   
  16.     @Override  
  17.     public Object getChild(int groupPosition, int childPosition) {  
  18.         return clildren.get(groupPosition).get(childPosition);  
  19.     }  
  20.   
  21.     @Override  
  22.     public long getChildId(int groupPosition, int childPosition) {  
  23.         return childPosition;  
  24.     }  
  25.   
  26.     @Override  
  27.     public View getChildView(int groupPosition, int childPosition,  
  28.             boolean isLastChild, View convertView, ViewGroup parent) {  
  29.         if (convertView == null) {  
  30.             convertView = inflater.inflate(  
  31.                     R.layout.journal_catalog_list_item_content, null);  
  32.         }  
  33.         TextView textView = (TextView) convertView  
  34.                 .findViewById(R.id.tv_journal_catalog_list_item_content);  
  35.         Article a = (Article) getChild(groupPosition, childPosition);  
  36.         textView.setText(a.getTitle());  
  37.         return convertView;  
  38.     }  
  39.   
  40.     @Override  
  41.     public int getChildrenCount(int groupPosition) {  
  42.         return clildren.get(groupPosition).size();  
  43.     }  
  44.   
  45.     @Override  
  46.     public Object getGroup(int groupPosition) {  
  47.         return parent[groupPosition];  
  48.     }  
  49.   
  50.     @Override  
  51.     public int getGroupCount() {  
  52.         return parent.length;  
  53.     }  
  54.   
  55.     @Override  
  56.     public long getGroupId(int groupPosition) {  
  57.         return groupPosition;  
  58.     }  
  59.   
  60.     @Override  
  61.     public View getGroupView(int groupPosition, boolean isExpanded,  
  62.             View convertView, ViewGroup parent) {  
  63.         if (convertView == null) {  
  64.             convertView = inflater.inflate(  
  65.                     R.layout.journal_catalog_list_item_title, null);  
  66.         }  
  67.         TextView textView = (TextView) convertView  
  68.                 .findViewById(R.id.tv_journal_catalog_list_item_title);  
  69.   
  70.         String title = String.valueOf(getGroup(groupPosition));  
  71.         textView.setText(title);  
  72.         convertView.setOnClickListener(null);  
  73.         return convertView;  
  74.     }  
  75.   
  76.     @Override  
  77.     public boolean hasStableIds() {  
  78.         return true;  
  79.     }  
  80.   
  81.     @Override  
  82.     public boolean isChildSelectable(int groupPosition, int childPosition) {  
  83.         return true;  
  84.     }  
  85. }  

原创粉丝点击