新手刚学安卓,今天看到GridView组件,用SimpleAdapter实现,但是代码中有看不懂的地方
package org.crazyit.ui;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.SimpleAdapter;
/**
- Description:
-
site: crazyit.org -
Copyright (C), 2001-2014, Yeeku.H.Lee -
This program is protected by copyright laws. -
Program Name: -
Date: - @author Yeeku.H.Lee kongyeeku@163.com
-
@version 1.0
*/
public class GridViewTest extends Activity
{
GridView grid;
ImageView imageView;
int[] imageIds = new int[]
{
R.drawable.bomb5 , R.drawable.bomb6 , R.drawable.bomb7
, R.drawable.bomb8 , R.drawable.bomb9 , R.drawable.bomb10
, R.drawable.bomb11 , R.drawable.bomb12 , R.drawable.bomb13
, R.drawable.bomb14 , R.drawable.bomb15 , R.drawable.bomb16
};
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 创建一个List对象,List对象的元素是Map
List> listItems =
new ArrayList>();
for (int i = 0; i < imageIds.length; i++)
{
Map listItem = new HashMap();
listItem.put("image", imageIds[i]);
listItems.add(listItem);
}
// 获取显示图片的ImageView
imageView = (ImageView) findViewById(R.id.imageView);
// 创建一个SimpleAdapter
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
listItems
// 使用/layout/cell.xml文件作为界面布局
, R.layout.cell, new String[] { "image" },
new int[] { R.id.image1 });
grid = (GridView) findViewById(R.id.grid01);
// 为GridView设置Adapter
grid.setAdapter(simpleAdapter);
// 添加列表项被选中的监听器
grid.setOnItemSelectedListener(new OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
{
// 显示当前被选中的图片
imageView.setImageResource(imageIds[position]);
}@Override public void onNothingSelected(AdapterView<?> parent) { } }); // 添加列表项被单击的监听器 grid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 显示被单击的图片的图片 imageView.setImageResource(imageIds[position]); } });
}
}
第一点 ,Map接口中的Key不是唯一的么,为什么在循环中key都是image
代码如下
for (int i = 0; i < imageIds.length; i++)
{
Map<String, Object> listItem = new HashMap<String, Object>();
listItem.put("image", imageIds[i]);
listItems.add(listItem);
}
第二点,对于simpleAdapter中第三个参数也就是哪个布局,这个cell布局里面只有一个imageView,但是主布局里面已经有了一个imageView啊,意义何在,下面上图
主布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center_horizontal"
>
<!-- 定义一个GridView组件 -->
<GridView
android:id="@+id/grid01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:horizontalSpacing="1pt"
android:numColumns="4"
android:verticalSpacing="1pt" >
</GridView>
<!-- 定义一个ImageView组件 -->
<ImageView android:id="@+id/imageView"
android:layout_width="240dp"
android:layout_height="240dp"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>