昨天遇到ListView的setOnItemClickListener没响应问题好不容易才找的问题所在。原来是ImageButton跟ListView焦点冲突了,很少处理焦点问题,这次是长见识了。
自定义的listview的item里面有ImageButton、Checkbox等获取焦点的子控件时,为了仍保留点击想点击效果,以及listview的onItemClickListener事件,需要如此做:
1、在item的根布局添加一下属性:
android:descendantFocusability=”blocksDescendants”
2、在ImageButton的获取焦点的控件添加一下属性:
android:focusable=”false”
如此,就可以在setOnItemClickListener中实现item中的文本TextView的点击事件;
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView> arg0, View arg1, int position, long arg3) {
if (Constant.isDebugMode) {
Log.d(TAG, “列表被点击了”);
}
}
});
在自定义的Adapter中实现子控件ImageButton中的点击事件;
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.favorite_detail, null);
mViewHolder = new ViewHolder();
mViewHolder.textview = (TextView) convertView.findViewById(R.id.title);
mViewHolder.imageButton = (ImageButton) convertView.findViewById(R.id.deleteBtn);
convertView.setTag(mViewHolder);
} else {
mViewHolder = (ViewHolder) convertView.getTag();
}
// 设置文本
mViewHolder.textview.setText(mLifeTitleList.get(position));
// 删除按钮监听事件
mViewHolder.imageButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//do something here
}
});
return convertView;
}
–每天一点点