我有一个ViewHolder,它有3个文本框,一个图像和一个gridview中的复选框。问题是,在我将复选框添加到此viewholder后,我似乎无法捕获/触发onclicklistener。 只有复选框似乎设置为选中或取消选中。如果我点击图像或文本框上的其他区域,我想触发onClick事件。
此外,如果有人知道我们是否可以通过setclickable将false设置为几个复选框,那么可以查看它但不能主动回复。
目前我的代码在ImageAdpater中:
public View getView(int position, View convertView, ViewGroup parent)
{
ViewHolder holder;
ImageView imgView = null;
if (convertView == null) {
holder = new ViewHolder();
LayoutInflater ltInflate = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
convertView = ltInflate.inflate(R.layout.griditem, null);
holder.textview1 = (TextView) convertView.findViewById(R.id.grid_item_alert_date);
holder.textview2 = (TextView) convertView.findViewById(R.id.grid_item_alert_time);
holder.textview3 = (TextView) convertView.findViewById(R.id.grid_item_alert_type);
holder.imageview = (ImageView) convertView.findViewById(R.id.grid_item_image);
holder.checkbox = (CheckBox) convertView.findViewById(R.id.checkbox_ack);
convertView.setTag(holder);
}
else
{
holder = (ViewHolder) convertView.getTag();
}
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
Toast.makeText(context, " checkbox checked", Toast.LENGTH_SHORT).show();
} });
holder.textview1.setText("Text 1 ");
holder.textview2.setText("Text 2 ");
holder.textview3.setText("Text 3 ");
holder.checkbox.setChecked(false);
holder.imageview.setImageBitmap(bitmap);
holder.id = position;
return convertView;
}
调用imageadpater的Activity处的代码:
GridView gridview = (GridView) findViewById(R.id.mygridview);
adapter = new ImageAdapter(this);
gridview.setAdapter(adapter);
gridview.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> parent, View v, int position, long id)
{
Toast.makeText(getBaseContext(),"pic" + (position + 1) + " selected",
Toast.LENGTH_SHORT).show();
}
}
);
所以上面的gridview.setOnItemClickListener没有被调用,为什么? 我尝试了不同的设置,但似乎没有任何工作,只有复选框事件可以工作,如果在上面的getView中定义也是如此。
需要紧急解决方案,干杯
答案 0 :(得分:3)
将这些行添加到布局xml中的复选框:
android:focusable="false"
android:focusableInTouchMode="false"
这就是诀窍。