这是我的自定义列表适配器类,其中我填充了包含一个复选框和imageview的列表项。选中该复选框后,图像视图将显示在列表视图的同一行上,单击该图像视图即可加载相机。但是,每次第一次加载相机并拍摄照片或按下而不捕捉图像时,复选框中的所有检查都会消失,但在第一次完成后,一切正常。任何人都可以告诉我为什么会这样吗
public class CustomListAdapter extends ArrayAdapter<String> {
private final Activity context;
private final String[] itemname;
private static final int CAMERA_REQUEST = 1888;
public CustomListAdapter(Activity context, String[] itemname) {
super(context, R.layout.merch_items, itemname);
// TODO Auto-generated constructor stub
this.context=context;
this.itemname=itemname;
}
public View getView(final int position,View view, ViewGroup parent){
LayoutInflater inflater = context.getLayoutInflater();
View rowView = inflater.inflate(R.layout.merch_items,null,true);
final ImageView imageView = (ImageView) rowView.findViewById(R.id.merchimageView);
final TextView merchText = (TextView) rowView.findViewById(R.id.merchimagetext);
final CheckBox checkBox = (CheckBox) rowView.findViewById(R.id.checkBox);
imageView.setTag("empty");
checkBox.setText(itemname[position]);
checkBox.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(checkBox.isChecked()){
imageView.setImageResource(R.drawable.camera);
imageView.setTag("available");
}
else{
imageView.setImageDrawable(null);
imageView.setTag("empty");
}
}
});
imageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(imageView.getTag().toString().equals("available")) {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
((Activity)context).startActivityForResult(cameraIntent, CAMERA_REQUEST);
}
}
});
return rowView;
}
}
答案 0 :(得分:0)
在适配器的数据更改通知中,重新创建列表。在这种情况下,即使你第二次完美的工作也不会成立。
编写getView
方法的方式并不完全正确。因为列表项没有回收过程,所以它们一直在创建。
处理此问题的一种方法是保留一个布尔列表,其中索引表示位置,布尔值表示检查框是否天气,使用该值可以设置要检查的复选框!