博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android组件学习之ExpandableListView
阅读量:6909 次
发布时间:2019-06-27

本文共 4904 字,大约阅读时间需要 16 分钟。

一个简单的小例子:

可以展开的ListView,和Listview差不多,只是设置的Adapter不同。常用的Adapter有BaseExpandableListAdapter、SimpleExpandableListAdapter、SimpleCursorTreeAdapter

布局如下:(布局中我设置了android:groupIndicator,不知道为什么不起作用。另外,android:dividerHeight这个属性是组对象和子节点共用的。如果要定义比较复杂的组视图及子节点视图,还是单独设置一个layout文件,再在Adapter中设置相应的返回View视图)

1 
10 11
23 24 25

主Activity如下:

1 package com.example.testandroid.ui; 2  3 import android.os.Bundle; 4 import android.support.v7.app.ActionBarActivity; 5 import android.view.Menu; 6 import android.view.MenuItem; 7 import android.widget.ExpandableListView; 8  9 import com.example.testandroid.R;10 import com.example.testandroid.adapter.MainActivityExLVAdapter;11 12 public class MainActivity extends ActionBarActivity {13 14     private ExpandableListView mExpandableListView = null;15     private MainActivityExLVAdapter mMainActivityExLVAdapter = null;16 17     @Override18     protected void onCreate(Bundle savedInstanceState) {19         super.onCreate(savedInstanceState);20         setContentView(R.layout.activity_main);21         init();22     }23 24     private void init() {25         mExpandableListView = (ExpandableListView) findViewById(R.id.main_elv1);26         mMainActivityExLVAdapter = new MainActivityExLVAdapter(this);27         mExpandableListView.setAdapter(mMainActivityExLVAdapter);28     }29 30     @Override31     public boolean onCreateOptionsMenu(Menu menu) {32         getMenuInflater().inflate(R.menu.main, menu);33         return true;34     }35 36     @Override37     public boolean onOptionsItemSelected(MenuItem item) {38         int id = item.getItemId();39         if (id == R.id.action_settings) {40             return true;41         }42         return super.onOptionsItemSelected(item);43     }44 }

Adapter我写到另外一个类文件中:

1 package com.example.testandroid.adapter;  2   3 import android.content.Context;  4 import android.view.View;  5 import android.view.ViewGroup;  6 import android.widget.BaseExpandableListAdapter;  7 import android.widget.TextView;  8   9 public class MainActivityExLVAdapter extends BaseExpandableListAdapter { 10  11     private Context mContext = null; 12  13     private String[] mGroup = { "FirstOne", "SecondTwo", "ThirdThress" }; 14     private String[][] mChildren = { 15             { "2014-year-01-month-01", "2014-year-01-month-02", 16                     "2014-year-01-month-03", "2014-year-01-month-04", 17                     "2014-year-01-month-05" }, 18             { "2014-year-02-month-01", "2014-year-02-month-02", 19                     "2014-year-02-month-03", "2014-year-02-month-04" }, 20             { "2014-year-03-month-01", "2014-year-03-month-02", } }; 21  22     public MainActivityExLVAdapter(Context mContext) { 23         this.mContext = mContext; 24     } 25  26     /** 27      * 获取组的数量 28      */ 29     @Override 30     public int getGroupCount() { 31         return mGroup.length; 32     } 33  34     /** 35      * 获取组下的节点数量 36      */ 37     @Override 38     public int getChildrenCount(int groupPosition) { 39         return mChildren[groupPosition].length; 40     } 41  42     /** 43      * 获取组对象(这个方法可以返回任意对象,或者null都行,给自己调用的) 44      */ 45     @Override 46     public Object getGroup(int groupPosition) { 47         return mGroup[groupPosition]; 48     } 49  50     /** 51      * 获取子节点对象(这个方法可以返回任意对象,或者null都行,给自己调用的) 52      */ 53     @Override 54     public Object getChild(int groupPosition, int childPosition) { 55         return mChildren[groupPosition][childPosition]; 56     } 57  58     /** 59      * 给自己调用的 60      */ 61     @Override 62     public long getGroupId(int groupPosition) { 63         return groupPosition; 64     } 65  66     /** 67      * 给自己调用的 68      */ 69     @Override 70     public long getChildId(int groupPosition, int childPosition) { 71         return childPosition; 72     } 73  74     /** 75      * TODO 不知道有什么用 76      */ 77     @Override 78     public boolean hasStableIds() { 79         return true; 80     } 81  82     /** 83      * 返回组对象的视图 84      */ 85     @Override 86     public View getGroupView(int groupPosition, boolean isExpanded, 87             View convertView, ViewGroup parent) { 88         TextView mTextView = new TextView(mContext); 89         mTextView.setText(getGroup(groupPosition).toString()); 90         return mTextView; 91     } 92  93     /** 94      * 返回子节点的视图 95      */ 96     @Override 97     public View getChildView(int groupPosition, int childPosition, 98             boolean isLastChild, View convertView, ViewGroup parent) { 99         TextView mTextView = new TextView(mContext);100         mTextView.setText(getChild(groupPosition, childPosition).toString());101         return mTextView;102     }103 104     @Override105     public boolean isChildSelectable(int groupPosition, int childPosition) {106         return false;107     }108 109 }

 

转载于:https://www.cnblogs.com/creasylai19/p/3903255.html

你可能感兴趣的文章
jmeter JDBC Request (查询数据库获取数据库数据) 的使用
查看>>
深入理解ajax系列第七篇——传递JSON
查看>>
Vim简明学习
查看>>
16.文件file
查看>>
PHP-FPM@year12
查看>>
Reportviewer中的函数使用——打印当前日期并格式化
查看>>
oracle用户管理
查看>>
15.Intellij中配置jdk/tomcat/maven
查看>>
GridView中实现CheckBox的全选
查看>>
home.pl 正在促销,一些域名免费(终止于2017.4.4)
查看>>
python、js 时间日期模块time
查看>>
Loadrunner监控Centos
查看>>
转:问题解决:The project cannot be built until build path errors are resolved
查看>>
Python--day25--面向对象之多态
查看>>
submit
查看>>
数据结构-----树状数组
查看>>
mac终端下svn常用命令
查看>>
C++的lambda表达式
查看>>
新手学习python(十六)封装redis
查看>>
vue移动端弹框组件
查看>>