• 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();
        }
    }
    
  • 相关阅读:
    idea设置tomcat虚拟路径的两种方法
    改变javahome但是java version并没有修改的解决方案
    1. 两数之和
    88. 合并两个有序数组
    53. 最大子数组和(欠分治法)
    【记录】orcle安装
    191. 位1的个数
    【记录】plsql安装
    IP2region离线解析IP地址
    flink 常用命令
  • 原文地址:https://www.cnblogs.com/joahyau/p/6549598.html
Copyright © 2020-2023  润新知