做一个显示多条信息的界面,用到了ListView + SimpleAdapter,想给ListView 设置Item监听时发现setOnItemClickListener方法失效。
解决办法:在CheckBox对应的布局加上 android:focusable=”false” 就可以解决;这个解决了之后 item、chockbox的点击监听都可以实现;
看了网上有些做法是在 在item最外层布局添加 android:descendantFocusability=”blocksDescendants” 还有在CheckBox对应的布局加 android:clickable=”false” 但是用这种方法 chockbox就不能被选中了;
blocksDescendants的意思是:viewgroup会覆盖子类控件而直接获得焦点;
ListView的item点击事件:
ll.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//点击item时要进行的操作
}
});
ChockBox的选中事件的代码:重写SimpleAdapter的 getView()方法
public View getView(final int position, View convertView, ViewGroup parent) {
View view= super.getView(position, convertView, parent);
CheckBox checkBox=view.findViewById(R.id.checkBox1);
checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
//position的值是0-25;
Toast.makeText(MainActivity.this,"你点击了第"+position+"个chockbox",Toast.LENGTH_LONG).show();
}
}
});
return view;
}