ExpandableListView

来源:互联网 发布:海岛奇兵能量神像数据 编辑:程序博客网 时间:2024/06/06 15:49

ExpandableListView顾名思义,为可展开的ListView(相当于ListView的每一行都是一个可以点击并展开的ListView)

相关知识:

ExpandableListView控件;

ExpandableListView的适配器:BaseExpandableListAdapter(用于继承)

ExpandableListView未展开时的监听回调:ExpandableListView.OnGroupCollapseListener,

ExpandableListView展开时的监听回调ExpandableListView.OnGroupExpandListener


Layout

创建一个ExpandableListView的Layout
activity_main

<?xml version="1.0" encoding="utf-8"?><ExpandableListView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/expand_list"    android:layout_width="wrap_content"    android:layout_height="wrap_content"></ExpandableListView>

再创建两个Layout,一个是一级目录的Item布局,另一个则是二级目录的Item布局

item

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="horizontal"    >    <TextView        android:id="@+id/GroupItem"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="TextView"        android:gravity="center_horizontal"/></LinearLayout>

child_item

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    >    <TextView        android:id="@+id/ChildItem"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_weight="1"        android:text="TextView" /></LinearLayout>

类文件

MainActivity

public class MainActivity extends AppCompatActivity {    private ExpandableListView expandListView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        ArrayList<String> list = new ArrayList<>();        ExpandAdapter adapter = new ExpandAdapter(list, this);        expandListView = (ExpandableListView)findViewById(R.id.expand_list);        expandListView.setAdapter(adapter);    }}

Item

public class Item {    public ArrayList<String> number;    public String course;    public Item(String course,ArrayList number){        this.course = course;        this.number = number;    }}

ExpandAdapter类:ExpandableListView的适配器类,大部分需要重写的方法和BaseAdapter一样,只不过多了Group及Child的区别,便不再赘叙。

public class ExpandAdapter extends BaseExpandableListAdapter implements ExpandableListView.OnGroupCollapseListener, ExpandableListView.OnGroupExpandListener {    Context context;    ArrayList<Item> list;    Boolean[] isOpen;    /*创建一个和一级目录一样数量元素的数组,用于保存及判断一级目录是否被打开,     *这个数组在该例子中并没有作用,仅仅是为了让继承的两个接口所重写的方法更具体一些     *即onGroupCollapse(int groupPosition)、onGroupExpand(int groupPosition)     */    public ExpandAdapter(ArrayList list,Context context){        this.list=  list;        this.context = context;        initListContext();    }    /*为方便起见,直接添加一些简单的数据源*/    public void initListContext() {        ArrayList<String> number = new ArrayList<>();        for (int i=0;i<5;i++){            number.add("课程"+i);        }        list.add(new Item("Java",number));        list.add(new Item("C++",number));        list.add(new Item("Python",number));        list.add(new Item("Math",number));        list.add(new Item("English",number));    }    @Override    public int getGroupCount() {        return list.size();    }    @Override    public int getChildrenCount(int groupPosition) {        return list.get(groupPosition).number.size();    }    @Override    public Object getGroup(int groupPosition) {        return list.get(groupPosition);    }    //返回二级标签的内容    @Override    public Object getChild(int groupPosition, int childPosition) {        return list.get(groupPosition).number.get(childPosition);    }    @Override    public long getGroupId(int groupPosition) {        return groupPosition;    }    @Override    public long getChildId(int groupPosition, int childPosition) {        return childPosition;    }    @Override    public boolean hasStableIds() {        return true;    }    @Override    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {        TextView group_text;        if (convertView == null) {            convertView =  LinearLayout.inflate(                    context, R.layout.item, null);        }        group_text = (TextView) convertView.findViewById(R.id.GroupItem);        group_text.setText(list.get(groupPosition)                .course);        return convertView;    }    @Override    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {       ViewHolder viewHolder;        if(convertView == null){            viewHolder = new ViewHolder();            convertView  = LayoutInflater.from(context).inflate(R.layout.child_item,null);            viewHolder.itemOfText = (TextView) convertView.findViewById(R.id.ChildItem);            convertView.setTag(viewHolder);        }else{            viewHolder  = (ViewHolder) convertView.getTag();        }        viewHolder.itemOfText.setText(list.get(groupPosition).number.get(childPosition));        return convertView;    }    @Override    public boolean isChildSelectable(int groupPosition, int childPosition) {        return true;    }    //ExpandableListView.OnGroupCollapseListener接口重写的方法    //当二级标签未展开时回调    @Override    public void onGroupCollapse(int groupPosition) {        isOpen[groupPosition] = false;    }    //ExpandableListView.OnGroupExpandListener接口重写的方法    //当二级标签展开时回调    @Override    public void onGroupExpand(int groupPosition) {        isOpen[groupPosition] = true;    }}class ViewHolder{       public  TextView itemOfText;}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 贪吃小怪兽下载 小怪兽萌图 fendi小怪兽 小怪兽摩托 植物大战小怪兽 芬迪小怪兽多少钱 小怪兽摩托车多少钱 小怪兽大逃亡 超级怪兽 小怪兽下载 迪迦之我是小怪兽 可爱的小怪兽 女怪兽 怪兽的图片 芬迪小怪兽零钱包 小怪兽英文 小怪兽表情包 绘本小怪兽 我是怪兽 巨型怪兽 植物大战小怪兽破解版 奥特大怪兽 神秘怪兽 小怪瘦多少钱一盒 小怪瘦 小怪瘦真的能减肥吗 小浓龙 绿色可爱小恐龙 小恐龙情头 小恐龙的故事 小恐龙故事 小恐龙图片可爱 可爱小恐龙 黑白小恐龙 萌小恐龙图片 抖音小恐龙画法 小恐龙阿贡全集 小恐龙历险记 秀恩爱 秀恩爱句子 恩爱图片