Android 如何使所有复选框仅在单击gridimage时可见
我想通过图像的Android 如何使所有复选框仅在单击gridimage时可见,android,android-layout,android-arrayadapter,android-gridview,Android,Android Layout,Android Arrayadapter,Android Gridview,我想通过图像的longclick使所有不可见的复选框可见。但这只会使一个复选框可见。 根据建议进行编辑 在gridadapter类中.. public GridViewAdapter(Context context, int layoutResourceId, ArrayList<ImageItem> data) { super(context, layoutResourceId, data); this.layoutResourceId = lay
longclick
使所有不可见的复选框
可见。但这只会使一个复选框可见。
根据建议进行编辑
在gridadapter类中..
public GridViewAdapter(Context context, int layoutResourceId,
ArrayList<ImageItem> data) {
super(context, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;//id of grid_item_layout
this.context = context;
this.imageFiles = imageFiles;
this.data = data;
}
public View getView(final int position, final View convertView, @NonNull ViewGroup parent) {
row = convertView;
final ViewHolder holder;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
//find resource...
holder.image = (ImageView) row.findViewById(R.id.image);
holder.imageTitle = (TextView) row.findViewById(R.id.text);
holder.check = (CheckBox) row.findViewById(R.id.checkbox);
row.setTag(holder);
}
else
{ holder = (ViewHolder) row.getTag();}
holder.check.setOnCheckedChangeListener(null);
holder.check.setFocusable(false);
holder.image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
holder.check.setVisibility(View.VISIBLE);
return true;
}
});
holder.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (data.get(position).isSelected()) {
data.get(position).setSelected(false);
} else {
data.get(position).setSelected(true);
}
}
});
holder.check.setChecked(data.get(position).isSelected());
holder.imageTitle.setText(data.get(position).getTitle());
holder.image.setImageBitmap(data.get(position).getImage());
return row;
}
static class ViewHolder {
TextView imageTitle;
ImageView image;
CheckBox check;
}
现在我希望所有事情都发生在适配器类本身中。
提前谢谢 适配器中使用的ViewHolder模式要求数据本身中存在项状态;直接对视图本身进行操作(如发布的示例中所示)将导致在滚动时出现奇怪的状态问题。ViewHolder.onBind()方法(或自定义等效方法)需要能够根据数据元素正确设置是否选中复选框,因此应转换getData(),以便每个项都有一个布尔isChecked字段
或者,如果所有项总是一起选中或取消选中,则适配器中可能有一个布尔字段,如果需要,可用于选中onBind()框。适配器中的方法可以更改布尔值,然后notifyDataSetChanged()重新绑定所有内容
如果我们能看到更多的GridViewAdapter实现,我们可以提供更多的细节
boolean ischecked =false ;
在bind方法中
holder.check.setVisibality(ischecked? View.VISIBLE:View.GONE);
holder.image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
ischecked = true;
notifyDataSetChanged():
//holder.check.setVisibility(View.VISIBLE);
return true;
}
});
您可以发布您的XML或用于创建复选框的方法吗?GridAdapter代码的其余部分也可能有用。
holder.check.setVisibality(ischecked? View.VISIBLE:View.GONE);
holder.image.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
ischecked = true;
notifyDataSetChanged():
//holder.check.setVisibility(View.VISIBLE);
return true;
}
});