展会信息港展会大全

android学习日记16--GridView(网格视图)
来源:互联网   发布日期:2015-10-03 10:48:09   浏览:2409次  

导读:一、GridView1、简述 GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局,不过和TableLayout还是差别很大的...

一、GridView

1、简述

GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局,

不过和TableLayout还是差别很大的,倒比较像二维的ListView。位于android.widget包下,常常用来实现类似九宫格的图像。

实现手法和ListView有点相似,用Apapter把数据绑定到控件上,为容器提供子视图,利用视图的数据和元数据来构建每个子视图自定义Adapter显示。

如果需要自定义适配器 可以扩展抽象类BaseAdapter。

2、常用属性和对应方法如下:

下面用实例化SimpleAdapter和继承抽象类BaseAdapter方法实现下图的例子:

3、实例化SimpleAdapter实现

Activity代码:

1private GridView gv;

2@Override

3protected void onCreate(Bundle savedInstanceState) {

4// TODO Auto-generated method stub

5super.onCreate(savedInstanceState);

6setContentView(R.layout.gridview);

7

8//准备要添加的数据条目

9List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();

10for (int i = 0; i < 9; i++) {

11Map<String, Object> item = new HashMap<String, Object>();

12item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID

13item.put("textItem", "icon" + i);//按序号添加ItemText

14items.add(item);

15}

16

17//实例化SimpleAdapter适配器

18SimpleAdapter adapter = new SimpleAdapter(this,

19items,

20R.layout.grid_item,

21new String[]{"imageItem", "textItem"},

22new int[]{R.id.image_item, R.id.text_item});

23

24

25//获得GridView实例

26gv = (GridView)findViewById(R.id.mygridview);

27//为GridView设置适配器

28gv.setAdapter(adapter);

29

30}

单个组件XML:

1 <?xml version="1.0" encoding="utf-8"?>

2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

3android:id="@+id/RelativeLayout1"

4android:layout_width="wrap_content"

5android:layout_height="fill_parent"

6android:paddingBottom="6dip"

7>

8<ImageView

9android:id="@+id/image_item"

10android:layout_width="wrap_content"

11android:layout_height="wrap_content"

12android:layout_centerHorizontal="true"

13android:src="@drawable/ic_launcher"

14/>

15<TextView

16android:id="@+id/text_item"

17android:layout_below="@+id/image_item"

18android:layout_height="wrap_content"

19android:layout_width="wrap_content"

20android:layout_centerHorizontal="true"

21/>

22 </RelativeLayout>

页面主布局XML:

1 <?xml version="1.0" encoding="utf-8"?>

2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

3android:layout_width="wrap_content"

4android:layout_height="wrap_content"

5>

6<GridView

7android:id="@+id/mygridview"

8android:numColumns="3"

9android:gravity="center_horizontal"

10android:layout_width="wrap_content"

11android:layout_height="wrap_content"

12android:stretchMode="columnWidth"

13/>

14 </LinearLayout>

4、继承抽象类BaseAdapter实现

替换成自己GridAdapter代码:

1 ////准备要添加的数据条目

2 //List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();

3 //for (int i = 0; i < 9; i++) {

4 //Map<String, Object> item = new HashMap<String, Object>();

5 //item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID

6 //item.put("textItem", "icon" + i);//按序号添加ItemText

7 //items.add(item);

8 //}

9 //

10 ////实例化SimpleAdapter适配器

11 //SimpleAdapter adapter = new SimpleAdapter(this,

12 //items,

13 //R.layout.grid_item,

14 //new String[]{"imageItem", "textItem"},

15 //new int[]{R.id.image_item, R.id.text_item});

16

17

18List<GridInfo> list = new ArrayList<GridInfo>();

19for (int i = 0; i < 9; i++) {

20list.add(new GridInfo("icon"+i));

21}

22

23GridAdapter adapter = new GridAdapter(this);

24adapter.setList(list);

补上GridAdapter代码:

1 public class GridAdapter extends BaseAdapter {

2

3private class GridHolder {

4ImageView appImage;

5TextView appName;

6}

7

8private Context context;

9

10private List<GridInfo> list;

11private LayoutInflater mInflater;

12

13public GridAdapter(Context c) {

14super();

15this.context = c;

16}

17

18public void setList(List<GridInfo> list) {

19this.list = list;

20mInflater = (LayoutInflater) context

21.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

22

23}

24

25public int getCount() {

26// TODO Auto-generated method stub

27return list.size();

28}

29

30@Override

31public Object getItem(int index) {

32

33return list.get(index);

34}

35

36@Override

37public long getItemId(int index) {

38return index;

39}

40

41@Override

42public View getView(int index, View convertView, ViewGroup parent) {

43GridHolder holder;

44if (convertView == null) {

45convertView = mInflater.inflate(R.layout.grid_item, null);

46holder = new GridHolder();

47holder.appImage = (ImageView)convertView.findViewById(R.id.image_item);

48holder.appName = (TextView)convertView.findViewById(R.id.text_item);

49convertView.setTag(holder);

50

51}else{

52holder = (GridHolder) convertView.getTag();

53

54}

55GridInfo info = list.get(index);

56if (info != null) {

57holder.appName.setText(info.getName());

58}

59return convertView;

60}

61

62 }

比较麻烦还是重写getView()方法。里面的GridInfo只是普通的JAVA bean类。

赞助本站

人工智能实验室

相关热词: android开发

AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港