Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何使所有复选框仅在单击gridimage时可见_Android_Android Layout_Android Arrayadapter_Android Gridview - Fatal编程技术网

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;
    }
});