Android 更改checbox';GridView中的s状态
我有一个带有自定义项的GridView:一个ImageView和一个复选框。我想在ImageView上设置ClickListener,以便在单击图像时选中/取消选中复选框的状态 这是gridView的适配器:Android 更改checbox';GridView中的s状态,android,android-imageview,android-gridview,android-adapter,android-checkbox,Android,Android Imageview,Android Gridview,Android Adapter,Android Checkbox,我有一个带有自定义项的GridView:一个ImageView和一个复选框。我想在ImageView上设置ClickListener,以便在单击图像时选中/取消选中复选框的状态 这是gridView的适配器: public class ProductAdapter extends ArrayAdapter<Product>{ Context context; int layoutResourceId; Product datap[]; public
public class ProductAdapter extends ArrayAdapter<Product>{
Context context;
int layoutResourceId;
Product datap[];
public ProductAdapter(Context context, int layoutResourceId, Product datap[]){
super(context, layoutResourceId, datap);
this.context = context;
this.layoutResourceId = layoutResourceId;
this.datap = datap;
}
@Override
public View getView(int position, View convertView, ViewGroup parent){
View row = convertView;
ProductHolder holder = null;
if(row == null){
LayoutInflater inflater = ((Activity)context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ProductHolder();
holder.imgIcon = (ImageView)row.findViewById(R.id.gviv);
holder.den = (TextView)row.findViewById(R.id.gvtv1);
holder.pretN = (TextView)row.findViewById(R.id.gvtv2);
holder.pretV = (TextView)row.findViewById(R.id.gvtv3);
holder.cb = (CheckBox)row.findViewById(R.id.gcb);
row.setTag(holder);
}else{
holder=(ProductHolder)row.getTag();
}
Product product = datap[position];
holder.denumire.setText(product.den);
holder.imgIcon.setImageResource(product.icon);
holder.imgIcon.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// THIS DOESN'T WORK!!!!!
holder.cb.setChecked(true);
}
});
holder.pretN.setText(product.pretN);
holder.pretV.setText(product.pretV);
return row;
}
static class ProductHolder{
ImageView imgIcon;
TextView den;
TextView pretN;
TextView pretV;
CheckBox cb;
}
}
公共类ProductAdapter扩展了ArrayAdapter{
语境;
国际布局资源;
产品数据p[];
public ProductAdapter(上下文上下文、int-layoutResourceId、产品数据p[]){
超级(上下文、布局资源ID、数据处理);
this.context=上下文;
this.layoutResourceId=layoutResourceId;
this.datap=datap;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
ProductHolder=null;
if(行==null){
LayoutInflater充气器=((活动)上下文)。getLayoutInflater();
行=充气机。充气(layoutResourceId,父级,false);
holder=新产品holder();
holder.imgIcon=(ImageView)row.findViewById(R.id.gviv);
holder.den=(TextView)row.findViewById(R.id.gvtv1);
holder.pretN=(TextView)row.findViewById(R.id.gvtv2);
holder.pretV=(TextView)row.findViewById(R.id.gvtv3);
holder.cb=(复选框)row.findViewById(R.id.gcb);
row.setTag(支架);
}否则{
holder=(ProductHolder)行。getTag();
}
产品产品=数据点[位置];
持有者.denumire.setText(产品.den);
holder.imgIcon.setImageResource(产品图标);
holder.imgIcon.setOnClickListener(新的OnClickListener(){
公共void onClick(视图v){
//这不行!!!!!
保持架cb.setChecked(正确);
}
});
holder.pretN.setText(product.pretN);
holder.pretV.setText(product.pretV);
返回行;
}
静态类产品持有者{
ImageView imgIcon;
文本视图;
文本视图pretN;
TextView-pretV;
复选框cb;
}
}
调用notifyDataSetChanged()代码>在check命令之后
public void onClick(View v) {
// THIS DOESN'T WORK!!!!!
holder.cb.setChecked(true);
notifyDataSetChanged();
}
你能添加一个简单的样本吗?那不是工作。。。“无法引用在不同方法中定义的内部类中的非最终变量持有者”我所做的只是告诉您将notifyDataSetChanged()放置在何处代码>命令。这是我粘贴在这里的代码。如果它以前工作过,这不会影响它。