GridView添加事件监听和常用属性解析

1. 使用流程

graph LR
准备数据源-->新建适配器
新建适配器-->绑定数据源
绑定数据源-->加载适配器

2. 常用属性

android:columnWidth:每一列的宽度。

android:numColumns:指定显示的列数,若不指定该属性,则默认所有项排成1列。如果想让列数根据屏幕大小自适应,满了就自动换行,可以设置为"auto_fit"。

android:verticalSpacing:行距。

android:horizontalSpacing:列距,若指定了numColumns,则按照numColumns均分宽度排列。

android:stretchMode:当我们指定了GridView的列宽和列距时,两者加起来可能小于实际屏幕大小,stretchMode就是指定剩余宽度的填充模式。常用参数为columnWidth、spacingWidth。若选择columnWidth,那么剩余宽度会均分给元素的列宽,而不会改变列距;如果选择spacingWidth,则不改变元素大小,而是将空白处均分到列距中。

假设一个GridView列宽为100dp,列距为10dp:

image

如果stretchMode设置为columnWidth:

image

如果为spacingWidth:

image

3. 事件监听

onItemClick(Adpater<?> parent, View view, int position, long id)

parent:官方解释为:The AdapterView where the click happened,也就是用户所点击的AdapterView,这个参数一般不用。

view:当前点击的列表项所对应的布局View对象,可通过这个参数获得相应的列表项内部的组件,进而对其进行操作。举个例子,假设有一个ListView,含有4个列表项,你点了第2个,那么通过view你就可以操作第2个列表项里面的TextView、ImageView等等的组件(假设存在)。

position:当前点击的列表项的位置,从0开始,也就是点击第n个,position就是n-1。

id:当前点击的列表项的序号,也是从0开始,绝大部分时候position和id是一样的。

4. 范例

public class GridViewActivity extends Activity implements AdapterView.OnItemClickListener{

    private GridView gridView;
    private List<Map<String, Object>>data;
    private int[] icon = {R.drawable.address_book, R.drawable.calendar,
            R.drawable.camera, R.drawable.clock, R.drawable.games_control,
            R.drawable.messenger, R.drawable.ringtone, R.drawable.settings,
            R.drawable.speech_balloon, R.drawable.weather, R.drawable.world,
            R.drawable.youtube};
    private String[] iconName = {"通讯录", "日历", "照相机", "时钟", "游戏", "短信", "铃声", "设置", "语音", "天气", "浏览器", "视频"};
    private SimpleAdapter simpleAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_grid_view);

        //2、新建适配器
        //3、绑定数据源
        data = new ArrayList<Map<String, Object>>();
        simpleAdapter = new SimpleAdapter(this, getData(), R.layout.grid_view_item, new String[]{"icon", "iconName"}, new int[]{R.id.icon, R.id.iconName});

        //4、设置适配器
        gridView = (GridView) findViewById(R.id.gridview);
        gridView.setAdapter(simpleAdapter);

        //5、设置监听器
        gridView.setOnItemClickListener(this);
    }

    //1、准备数据源
    private List<Map<String,Object>> getData() {
        for (int i = 0; i < icon.length; i++) {
            Map<String, Object>map = new HashMap<String, Object>();
            map.put("icon", icon[i]);
            map.put("iconName", iconName[i]);
            data.add(map);
        }
        return data;
    }

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        Toast.makeText(this, iconName[position], Toast.LENGTH_SHORT).show();
    }
}
原文地址:https://www.cnblogs.com/joahyau/p/6549598.html