Android常用控件之GridView与ExpandableListView的用法
概述
1、GridView:与ListView相比,可以显示多列,xml布局时其属性numColumns可以设置显示的列数。
2、ExpandableListView:与ListView相比,可以让每一列单元都拥有子列表。
内容
GridView
显示3列和多行的图片以及名称
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"
android:layout_margin="15dp"
android:orientation="vertical">
<GridView
android:id="@+id/grid_view"
android:background="#88000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numColumns="3">
</GridView>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
每个表单元的布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/item_imageview"
android:layout_width="100dp"
android:layout_height="100dp"/>
<TextView
android:id="@+id/item_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
先写一个Fruit类
public class Fruit {
private String name;
private int img;
public Fruit(String name, int img) {
this.name = name;
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
接着建立一个GridView的适配器
public class FruitGridAdapter extends BaseAdapter {
private List<Fruit> mFruits;
private LayoutInflater mInflater;
public FruitGridAdapter(List<Fruit> mFruits, LayoutInflater mInflater) {
this.mFruits = mFruits;
this.mInflater = mInflater;
}
@Override
public int getCount() {
return mFruits.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView==null){
viewHolder = new ViewHolder();
convertView = mInflater.inflate(R.layout.grid_item,null);
viewHolder.imageView = (ImageView) convertView.findViewById(R.id.item_imageview);
viewHolder.textView = (TextView) convertView.findViewById(R.id.item_textview);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
Fruit fruit = mFruits.get(position);
viewHolder.imageView.setImageResource(fruit.getImg());
viewHolder.textView.setText(fruit.getName());
return convertView;
}
class ViewHolder{
ImageView imageView;
TextView textView;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
主活动
public class MainActivity extends Activity {
private List<Fruit> mFruits;
private LayoutInflater mInflater;
private GridView gridView;
private FruitGridAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = (GridView) findViewById(R.id.grid_view);
mInflater = this.getLayoutInflater();
mFruits = new ArrayList<>();
Fruit apple = new Fruit("apple", R.mipmap.a_logo1);
Fruit pear = new Fruit("pear", R.mipmap.image);
Fruit pineapple = new Fruit("pineapple", R.mipmap.pk);
Fruit grape = new Fruit("grape", R.mipmap.ic_launcher);
for (int i = 0; i < 20; i++) {
mFruits.add(apple);
mFruits.add(pear);
mFruits.add(pineapple);
mFruits.add(grape);
}
mAdapter = new FruitGridAdapter(mFruits,mInflater);
gridView.setAdapter(mAdapter);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
结果演示
ExpandableListView
写一个可以显示各个班级信息和班级学生信息的活动
布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/search_frame"
android:orientation="vertical">
<ExpandableListView
android:id="@+id/expandable_listview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp">
</ExpandableListView>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
主单元项班级的布局
<?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:background="#55ff0000"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:id="@+id/clazz_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
<TextView
android:id="@+id/clazz_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
<TextView
android:id="@+id/students_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
子单元项学生的布局
<?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:background="#8800ffff"
android:gravity="center_horizontal"
android:orientation="horizontal">
<TextView
android:id="@+id/student_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
<TextView
android:id="@+id/student_sex"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
<TextView
android:id="@+id/student_age"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="15dp"/>
</LinearLayout>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
首先写个班级类
public class Clazz {
private String clazzName;
private String clazzNum;
private List<Student> students;
public Clazz(String clazzName,String clazzNum) {
this.clazzNum = clazzNum;
this.clazzName = clazzName;
}
public String getClazzName() {
return clazzName;
}
public void setClazzName(String clazzName) {
this.clazzName = clazzName;
}
public String getClazzNum() {
return clazzNum;
}
public void setClazzNum(String clazzNum) {
this.clazzNum = clazzNum;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
接着写建立一个学生类
public class Student {
private String studentName;
private String sex;
private String age;
public Student(String studentName, String sex, String age) {
this.studentName = studentName;
this.sex = sex;
this.age = age;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
适配器
public class MyExpAdapter extends BaseExpandableListAdapter {
private List<Clazz> mClazzs;
private LayoutInflater mInflater;
public MyExpAdapter(List<Clazz> mClazzs, LayoutInflater mInflater) {
this.mClazzs = mClazzs;
this.mInflater = mInflater;
}
@Override
public int getGroupCount() {
return mClazzs.size();
}
@Override
public int getChildrenCount(int groupPosition) {
return mClazzs.get(groupPosition).getStudents().size();
}
@Override
public Object getGroup(int groupPosition) {
return groupPosition;
}
@Override
public Object getChild(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public boolean hasStableIds() {
return false;
}
@Override
public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
GroupViewHolder gvh = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.clazz_item, null);
gvh = new GroupViewHolder();
gvh.clazzName = (TextView) convertView.findViewById(R.id.clazz_name);
gvh.clazzNum = (TextView) convertView.findViewById(R.id.clazz_num);
gvh.studentsNum = (TextView) convertView.findViewById(R.id.students_num);
convertView.setTag(gvh);
} else {
gvh = (GroupViewHolder) convertView.getTag();
}
Clazz clazz = mClazzs.get(groupPosition);
gvh.clazzName.setText(clazz.getClazzName());
gvh.clazzNum.setText(clazz.getClazzNum());
gvh.studentsNum.setText(clazz.getStudents().size() + "人");
return convertView;
}
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
ChildViewHolder cvh = null;
if(convertView==null) {
cvh = new ChildViewHolder();
convertView = mInflater.inflate(R.layout.students_item, null);
cvh.studentName = (TextView) convertView.findViewById(R.id.student_name);
cvh.studentSex = (TextView) convertView.findViewById(R.id.student_sex);
cvh.studentAge = (TextView) convertView.findViewById(R.id.student_age);
convertView.setTag(cvh);
}else{
cvh = (ChildViewHolder) convertView.getTag();
}
Student student = mClazzs.get(groupPosition).getStudents().get(childPosition);
cvh.studentName.setText(student.getStudentName());
cvh.studentSex.setText(student.getSex());
cvh.studentAge.setText(student.getAge());
return convertView;
}
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return false;
}
private class GroupViewHolder {
TextView clazzName;
TextView clazzNum;
TextView studentsNum;
}
private class ChildViewHolder {
TextView studentName;
TextView studentSex;
TextView studentAge;
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
主活动
public class MainActivity extends Activity {
private List<Clazz> mClazzs;
private ExpandableListView mExpandableListView;
private MyExpAdapter mMyExpAdapter;
private LayoutInflater mInflater;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mExpandableListView = (ExpandableListView)findViewById(R.id.expandable_listview);
initData();
mInflater = getLayoutInflater();
mMyExpAdapter = new MyExpAdapter(mClazzs,mInflater);
mExpandableListView.setAdapter(mMyExpAdapter);
}
private void initData() {
mClazzs = new ArrayList<>();
Clazz clazz1 = new Clazz("一班","201501");
Clazz clazz2 = new Clazz("二班","201502");
Clazz clazz3 = new Clazz("三班","201503");
Clazz clazz4 = new Clazz("四班","201504");
List<Student> students = new ArrayList<>();
Student zhangsan = new Student("张三","男","21");
Student lisi = new Student("李四","女","20");
Student wangwu = new Student("王五","男","22");
Student zhaoliu = new Student("赵六","女","19");
students.add(zhangsan);
students.add(lisi);
students.add(wangwu);
students.add(zhaoliu);
clazz1.setStudents(students);
clazz2.setStudents(students);
clazz3.setStudents(students);
clazz4.setStudents(students);
mClazzs.add(clazz1);
mClazzs.add(clazz2);
mClazzs.add(clazz3);
mClazzs.add(clazz4);
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
结果演示
Android常用控件之GridView与ExpandableListView的用法的更多相关文章
- Android常用控件之GridView使用BaseAdapter
我们可以为GridView添加自定义的Adapter,首先看下用自定义Adapter的显示效果 在布局文件main.xml文件中定义一个GridView控件 <RelativeLayout xm ...
- Android基本控件之GridView
我们在使用手机的过程中,会看到一些图片配上文字的一些情况,今天我们就来介绍一下安卓控件的GridView GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字.图片或其他元 ...
- Android常用控件及对应Robotium API
最近发现Android控件不熟悉,看Robotium的API都费劲. 常用Android控件: 控件类型 描述 相关类 Button 按钮,可以被用户按下或点击,以执行⼀个动作 Button Text ...
- 常用的基本控件 android常用控件
1.TextView:(文本框):不能编辑 android:textColor="@color/tv_show_color" 字体颜色 android:textSize ...
- Android常用控件
Android 中使用各种控件(View) DatePicker - 日期选择控件 TimePicker - 时间选择控件 ToggleButton - 双状态按钮控件 EditText - 可编辑 ...
- Android常用控件之RatingBar的使用
RatingBar控件比较常见就是用来做评分控件,先上图看看什么是RatingBar 在布局文件中声明 <?xml version="1.0" encoding=" ...
- android常用控件的使用方法
引言 xml很强大 TextView <TextView android:id="@+id/text_view" android:layout_width="mat ...
- Android常用控件之ExpandableList的使用
先来看下什么是ExpandableListView 跟列表有点像,这种是可以折叠的列表,下面来看下是如何在代码中实现 一.在布局文件中声明一个ExpandableListView <Linear ...
- Android 常用控件的介绍
http://www.cnblogs.com/linjiqin/category/284058.html 最流行的android组件大全:http://www.cnblogs.com/linjiqin ...
随机推荐
- Kafka单机环境部署
前面说过Kafka集群环境的部署,现在主要说一下在本地测试中Kafka单机环境的部署,和前面一样首先保证zookeeper服务的正常运行,然后解压并释放kafka安装包,并放到指定位置: tar -x ...
- winrt 页面进入动画
private async void DoAnimistion(){Storyboard storyboard = new Storyboard(); using (IEnumerator<De ...
- HDU 1693 Eat the Trees(插头DP、棋盘哈密顿回路数)+ URAL 1519 Formula 1(插头DP、棋盘哈密顿单回路数)
插头DP基础题的样子...输入N,M<=11,以及N*M的01矩阵,0(1)表示有(无)障碍物.输出哈密顿回路(可以多回路)方案数... 看了个ppt,画了下图...感觉还是挺有效的... 参考 ...
- C Primer Plus_第一章_概览_复习题与编程练习
REVIEW 1.就编程而言,可移植性表示什么? me 一个系统上编写的程序经过很少改动或者不需改动就可以在另一个系统上运行.如果修改是必须的,则通常只改变伴随主程序的一个头文件中的几项内容即可.(P ...
- WCF服务跟踪
如果在开发过程中,WCF服务出现问题,我们可以通过服务引用,然后直接断点调试进去.然而,对于已经发布的服务,出现错误时,寻找错误信息会变得麻烦. 幸好,微软提供了服务跟踪查看器工具 (SvcTrace ...
- ios wax热更新之安装wax(xcode7.3.1)
通过Finder浏览到你保存该项目的文件夹.创建三个新的文件夹:wax.scripts和Classes. 第一:首先,下载源代码的压缩包.Wax放在GitHub上(https://github.com ...
- js中我的注释规范
模块功能描述说明: /** * ------------------------------------------------------------------ * 模块描述说明 * ------ ...
- NYOJ之奇偶数分离
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAscAAAJ8CAIAAACdmZvPAAAgAElEQVR4nO3dPVLjStsG4G8T5CyEFC
- n数乘积第m小
这是从Java贴吧看到的一道面试题,看了别人的解题思路实现的.... 如题: n个数,他们的乘积可得到一些其它的数,求第m小的. 输入格式: n m n1 n2 n3 ... 例: 输入: 3 8 2 ...
- 两个viewport的故事(第一部分)
原文:http://www.quirksmode.org/mobile/viewports.html 在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如< ...