• ListView添加item的事件监听


    1. 点击事件(OnItemClickListener)

    onItemClick(AdapterView<?> 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是一样的。

    public class MainActivity extends Activity implements AdapterView.OnItemClickListener{
    
        private ListView myListView;
        private SimpleAdapter simpleAdapter;
        private List<Map<String, Object>> data;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            data = new ArrayList<Map<String, Object>>();
            simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"img", "text"}, new int[]{R.id.img, R.id.text});
            myListView = (ListView) findViewById(R.id.myListView);
            //设置监听器
            myListView.setAdapter(simpleAdapter);
            myListView.setOnItemClickListener(this);
        }
    
        private List<Map<String, Object>> getData() {
            for (int i = 0; i < 20; i++) {
                Map<String, Object>map = new HashMap<String, Object>();
                map.put("img", R.mipmap.ic_launcher);
                map.put("text", "初始simpleAdapter"+(i+1));
                data.add(map);
            }
    
            return data;
        }
    
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //通过view获取其内部的组件,进而进行操作
            String text = (String) ((TextView)view.findViewById(R.id.text)).getText();
            //大多数情况下,position和id相同,并且都从0开始
            String showText = "点击第" + position + "项,文本内容为:" + text + ",ID为:" + id;
            Toast.makeText(this, showText, Toast.LENGTH_LONG).show();
        }
    }
    

    2. 滚动事件(OnScrollListener)

    void onScrollStateChanged(AbsListView view, int scrollState)
    

      监听滚动状态的变化。

      view:正在被滚动的视图,也就是当前的ListView。

      scrollState:滚动状态,分别有以下几种:

        SCROLL_STATE_TOUCH_SCROLL:滑动状态,手指在视图滑动,并且手指一直停留在屏幕上而未离开。

        SCROLL_STATE_FLING:投掷状态,手指在离开视图前,用力划了一下(想象将视图投掷出去的感觉),视图会按照惯性滑动至停止。

        SCROLL_STATE_IDLE:闲置状态,什么都没做的状态。当投掷状态或触摸滚动状态结束时,进入闲置状态。

    void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
    

      监听非滚动状态,只要ListView不滚动,就会被不断调用。

      view:正在被滚动的视图,也就是当前的ListView。

      firstVisibleItem:已加载的第一个列表项的索引值。

      visibleItemCount:已加载的列表项的总数。

      totalItemCount:适配器中数据源对应的列表项总数。

    public class MainActivity extends Activity implements AbsListView.OnScrollListener{
    
        private ListView myListView;
        private SimpleAdapter simpleAdapter;
        private List<Map<String, Object>> data;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            data = new ArrayList<Map<String, Object>>();
            simpleAdapter = new SimpleAdapter(this, getData(), R.layout.item, new String[]{"img", "text"}, new int[]{R.id.img, R.id.text});
            myListView = (ListView) findViewById(R.id.myListView);
            myListView.setAdapter(simpleAdapter);
    
            //设置监听器
            myListView.setOnScrollListener(this);
        }
    
        private List<Map<String, Object>> getData() {
            for (int i = 0; i < 20; i++) {
                Map<String, Object>map = new HashMap<String, Object>();
                map.put("img", R.mipmap.ic_launcher);
                map.put("text", "初始simpleAdapter"+(i+1));
                data.add(map);
            }
    
            return data;
        }
    
        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
            switch (scrollState) {
                //投掷状态
                case SCROLL_STATE_FLING:
                    Toast.makeText(this, "SCROLL_STATE_FLING", Toast.LENGTH_SHORT).show();
                    break;
                //闲置状态
                case SCROLL_STATE_IDLE:
                    Toast.makeText(this, "SCROLL_STATE_IDLE", Toast.LENGTH_SHORT).show();
                    break;
                //滑动状态
                case SCROLL_STATE_TOUCH_SCROLL:
                    Toast.makeText(this, "SCROLL_STATE_TOUCH_SCROLL", Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    
        @Override
        public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
    //        Toast.makeText(this, "滚动已停止,已加载的第一项的索引为:" + firstVisibleItem +
    //                        ",已加载的列表项总数为:" + visibleItemCount + ",存在的列表项总数为:" +
    //                        totalItemCount, Toast.LENGTH_LONG).show();
        }
    }
    
  • 相关阅读:
    消息中间件(一)MQ详解及四大MQ比较
    SIP协议
    PAT (Basic Level) Practice 1008 数组元素循环右移问题
    LeetCode-Algorithms 1. 两数之和
    PAT (Basic Level) Practice 1040 有几个PAT
    PAT (Basic Level) Practice 1023 组个最小数
    PAT (Basic Level) Practice 1021 个位数统计
    PAT (Basic Level) Practice 1007 素数对猜想
    PAT (Basic Level) Practice 1006 换个格式输出整数
    PAT (Basic Level) Practice 1004 成绩排名
  • 原文地址:https://www.cnblogs.com/joahyau/p/6541386.html
Copyright © 2020-2023  润新知