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
|