Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

Android中ListView选中事件setOnItemSelectedListener无反应不生效问题

在学习Android中ListView组件时,android模拟器运行app时,发现点击有反应,选中无反应,原因是在android模拟器中需要按键盘上下键来触发选中事件。

Android开发ListView事件:setOnItemSelectedListener、setOnItemClickListener、setOnTouchlistener3个不同监听区别,相信大家和我之前一样会有模糊,在手机上操作,感觉没什么区别,但是实际不是。首先从字面上理解,分别是:选择、点击和触摸,但是在实际中该如何使用呢?现在做android开发的,所使用的不论是真机还是模拟机,都是触屏交互的,在这里当选择或点击或触摸某个Item时,前后这些操作的先后顺序是:触摸→点击或选择;那么点击和选择的区分呢?在android手机设备中还真分不清,但是在android电视设备中,使用遥控器通过上下键选择Item与点击Item的时候,这下区分明白了吧!所以在android手机设备中,推荐使用点击,因为笔者在学习的时候分别对这两个接口测试,发现选择无效。

那如何增加点击选中功能呢?

可参考:android listview选中某一行,成选中状态颜色高亮显示

https://blog.csdn.net/dearbaba_8520/article/details/80468602

一种方法是构造自己的adapter,在getView中,设置颜色,点击item,刷新listview。

另外一种方法代码如下:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 创建一个List集合,List集合的元素是Map
    List<Map<String, Object>> listItems =
            new ArrayList<Map<String, Object>>();
    for (int i = 0; i < names.length; i++)
    {
        Map<String, Object> listItem = new HashMap<String, Object>();
        listItem.put("header", imageIds[i]);
        listItem.put("personName", names[i]);
        listItem.put("desc", descs[i]);
        listItems.add(listItem);
    }
    // 创建一个SimpleAdapter
    SimpleAdapter simpleAdapter = new SimpleAdapter(this, listItems,
            R.layout.simple_item,
            new String[] { "personName", "header" , "desc"},
            new int[] { R.id.name, R.id.header , R.id.desc });
    ListView list = (ListView) findViewById(R.id.mylist);
    // 为ListView设置Adapter
    list.setAdapter(simpleAdapter);

    // 为ListView的列表项的单击事件绑定事件监听器
    list.setOnItemClickListener(new OnItemClickListener()
    {
        // 第position项被单击时激发该方法
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id)
        {
            System.out.println(names[position]
                    + "被单击了");
            //View v=parent.getChildAt(position);
            //v.setBackgroundColor(Color.RED);
            for(int i=0;i<parent.getCount();i++){
                View v=parent.getChildAt(i);
                if (position == i) {
                    v.setBackgroundColor(Color.GRAY);
                } else {
                    v.setBackgroundColor(Color.TRANSPARENT);
                }
            }
        }
    });
    // 为ListView的列表项的选中事件绑定事件监听器
    list.setOnItemSelectedListener(new OnItemSelectedListener()
    {
        // 第position项被选中时激发该方法
        //在android模拟器中需要按键盘上下键触发选中事件
        @Override
        public void onItemSelected(AdapterView<?> parent, View view,
                                   int position, long id)
        {
            System.out.println(names[position]
                    + "被选中了");
            for(int i=0;i<parent.getCount();i++){
                View v=parent.getChildAt(i);
                v.setBackgroundColor(Color.TRANSPARENT);
            }
        }
        @Override
        public void onNothingSelected(AdapterView<?> parent)
        {
        }
    });
}

旧问新解·ListView 中的 OnItemSelectedListener 不生效https://www.jianshu.com/p/d11f86051c20

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值