对ExpandableListView的小小使用
来源:互联网 发布:网络信息化建设需求 编辑:程序博客网 时间:2024/06/03 17:11
首先,我们明确一下思路:
第一步:设置最基本布局(layout),并初始化(MainActivity);
第二步:造数据(此处用最简单的数组呈现);
第三步:设置适配器
第四步:设置点击事件看效果(此处不展现)
第一步:
在activity_layout中添加如下代码:
<ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="wrap_content"> </ExpandableListView>
并在MainActivity进行初始化:
private ExpandableListView elv;//elv为自定义onCreate....{... elv = (ExpandableListView) findViewById(R.id.elv);...}
第二步:
此处我们设置两个一维数组,一个用来代表分组(可以联想QQ中的分组),另一个用来存储头像的id,再用一个二维数组来代表分组中的子元素(也就是你QQ中的好友)。为了方便调用数据,我们需将这三个数组设置为全局量。代码如下:
private String []groups;//组名private String [][]children;//组内孩子int [][]drawable_items;//存放头像
为数组赋值:
private void initDate() { //分组 groups = new String[]{"朋友","同学","亲友"}; //组内孩子 children = new String[][]{{"张三","李四","王五"},{"甲","乙","丙"},{"大姨","小姨","姑姑"}}; //头像 drawable_items = new int[][] {{R.drawable.a,R.drawable.b,R.drawable.c},{R.drawable.a,R.drawable.c,R.drawable.b},{R.drawable.c,R.drawable.b,R.drawable.a}}; }//此处a、b、c为我事先准备好的图片
第三步:(重点)
设置数据适配器,首先创建一个新的类:在项目文件下右击new->Java Class
此时,由于继承BaseExpandableListAdapter但并没有实现其方法,所以将鼠标移动到红色波浪线下,使用快捷键Alt+Enter将未实现方法加载出来。代码如下:
package com.example.myuniversity;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.ImageView;import android.widget.TextView;public class ElvAdapter extends BaseExpandableListAdapter { private MainActivity mainActivity; private String[] groups; private String[][] children; private int[][] drawable_items;//构造方法,方便实例化 public ElvAdapter(MainActivity mainActivity, String[] groups, String[][] children, int[][] drawable_items) { this.mainActivity = mainActivity; this.groups = groups; this.children = children; this.drawable_items = drawable_items; } @Override public int getGroupCount() { return groups.length; }//得到分组数目 @Override public int getChildrenCount(int i) { return children[i].length; }//得到组内孩子数目 @Override public Object getGroup(int i) { return groups[i]; }//将某一组返回 @Override public Object getChild(int i, int i1) { return children[i][i1]; }//将某个孩子返回 @Override public long getGroupId(int i) { return i; }//返回组号 @Override public long getChildId(int i, int i1) { return i1; }//返回孩子号 @Override public boolean hasStableIds() { return true; }//是否有稳定的Id @Override public View getGroupView(int i, boolean b, View view, ViewGroup viewGroup) { View view1 = View.inflate(mainActivity,R.layout.group_items,null); TextView tv_title = view1.findViewById(R.id.tv_title); tv_title.setText(groups[i]); return view1;//此处不要误将view返回,view此处为空,下同 }//返回组视图(此处layout见下面) @Override public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) { View view1 = View.inflate(mainActivity,R.layout.group_items,null); ImageView imageView = view1.findViewById(R.id.imageview); TextView tv_title = view1.findViewById(R.id.tv_title); tv_title.setText(children[i][i1]); imageView.setImageResource(drawable_items[i][i1]); return view1; }//返回孩子的视图(见下面layout代码) @Override public boolean isChildSelectable(int i, int i1) { return true; }//孩子是否被选中}
由于适配器中需要返回组及孩子视图,所以在layout文件夹下新建group_items.xml文件。代码如下:
<?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" android:orientation="horizontal"> //头像 <ImageView android:id="@+id/imageview" android:layout_width="40dp" android:layout_height="40dp" /> //组的名字及孩子的名字(联想QQ) <TextView android:id="@+id/tv_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp"/></LinearLayout>
如此,就将数据适配器完成了,剩下的就是为上文提到的elv装上适配器。
在MainActivity中的onCreate中:
initDate();//上文已实现//调用构造方法,为elv装上适配器elv.setAdapter(new ElvAdapter(this,groups,children,drawable_items));
如此,整体就完成了,至于再加点击事件的话,就在装载适配器之后就可以了,此处就不展示了。效果图如下:
ps: 这是我第一次写博客,有不足之处欢迎大家多多包含,我会虚心接受任何建言的,嘿嘿!
阅读全文