我刚开始开发到android,请帮忙。
我无法弄清楚我错过了什么.. 复选框检查工作,我也想通过点击图像进行检查。
这部分效果很好:
holder.checkbox.setId(position);
holder.imageview.setId(position);
holder.checkbox.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
// TODO Auto-generated method stub
CheckBox cb = (CheckBox) v;
//ImageView cb1 = (ImageView) v;
int id = cb.getId();
if (thumbnailsselection[id])
{
cb.setChecked(false);
thumbnailsselection[id] = false;
} else
{
cb.setChecked(true);
thumbnailsselection[id] = true;
}
// ImageView im = (ImageView) v;
}
});
///////////////////////////////////////////////////////
问题在于:
holder.imageview.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
CheckBox cb = (CheckBox) v;
int id = v.getId();
if (thumbnailsselection[id])
{
cb.setChecked(false);
thumbnailsselection[id] = false;
} else
{
cb.setChecked(true);
thumbnailsselection[id] = true;
}
}});
logcat的:
java.lang.ClassCastException: android.support.v7.widget.AppCompatImageView cannot be cast to android.widget.CheckBox
感谢。
答案 0 :(得分:1)
保持常见的点击监听器,
View.OnClickListener clickListener = new View.OnClickListener()
{
public void onClick(View v)
{
int id = holder.checkbox.getId();
if (thumbnailsselection[id])
{
holder.checkbox.setChecked(false);
thumbnailsselection[id] = false;
} else
{
holder.checkbox.setChecked(true);
thumbnailsselection[id] = true;
}
}
};
然后将此侦听器设置为imageview和checkbox,如此,
holder.checkbox.setOnClickListener(clickListener);
holder.imageview.setOnClickListener(clickListener);
答案 1 :(得分:0)
holder.imageview.setOnClickListener(new View.OnClickListener()public void onClick(View v){
public void onClick(View v){
CheckBox cb = (CheckBox) v; // In here v is the ImageView not CheckBox so you will get java.lang.ClassCastException
在您的情况下,您可以使用
holder.imageview.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
int id = holder.checkbox.getId();
if (thumbnailsselection[id]){
holder.checkbox.setChecked(false);
thumbnailsselection[id] = false;
} else {
holder.checkbox.setChecked(true);
thumbnailsselection[id] = true;
}
}
});