java文件
声明GridView,simpleAdapter的数据源 datalist,所有darwable的id,namey以及simpleAdapter类型的适配器adapter
private GridView gridView;
private List<Map<String, Object>>datalist;//声明simpleAdapter的数据源
//因为所有drawable的id都是整形,所以用一个整形数组对他们进行封装
private int logo[]={R.drawable.camera,R.drawable.clock,R.drawable.phone,R.drawable.mail,R.drawable.qq,R.drawable.voice};
private String logoName[]={"camera","clock","phone","mail","qq","voice"};
//声明适配器
private SimpleAdapter adapter;
- 创建数据源
datalist=new ArrayList<Map<String, Object>>();//把数据源的集合新建出来
//Map是以泛型(<String,Object>组成)
private List<Map<String, Object>> getData() {
for (int i = 0; i < logo.length; i++) {
Map<String, Object>map=new HashMap<String,Object>();
map.put("image", logo[i]);
map.put("text", logoName[i]);
datalist.add(map);//把新建好的map加载到集合中来
}
return datalist;
- 新建适配器(simpleAdapter),simpleAdapter的数据源是一个特殊泛型的集合
/* 参数1(context):上下文,表示当前的Activity
*
* 参数2(data):List<? extends Map<String, ?>> 类型
* 每一个Map(key-value对)中的key必须去包含所有在from中所指定的键(pic和text)
*
* 参数3(resource):列表项的布局文件ID
* 参数4(from):Map中的键名
* 参数5(to):绑定数据视图中的ID,与from成对使用
*/
adapter=new SimpleAdapter(this, getData(),R.layout.new_layout , new String[]{"image","text"},
new int[]{R.id.imageView,R.id.textView});
- GridView加载适配器
//视图加载适配器
gridView.setAdapter(adapter);
- GridVView配置事件监听器
gridView.setOnItemClickListener(this);
@Override
//position的下标也是从零开始,正好与数组的下标一一对应
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(this, "我是"+logoName[position], Toast.LENGTH_LONG).show();
}
###xml文件
<!--
abdroid:numColumns="" 每一行显示多少列
android:horziontalSpacing="" 两列之间的间距
android:verticalSpacing="" 两行之间的间距
-->
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#000000"/>
<GridView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/gridView"
android:numColumns="3"
android:verticalSpacing="30dp"
android:horizontalSpacing="30dp"/>