android-在自定义GridView中使用复选框选择多个对象

android-在自定义GridView中使用复选框选择多个对象,android,gridview,checkbox,multi-select,Android,Gridview,Checkbox,Multi Select,我正在开发一个游戏,我有一个目录作为GridView。每个网格项目都是一个游戏对象,在单击时被选中。游戏表明,用户可以选择单个对象或组合对象 我需要的是非常具体的:我希望当用户按下菜单按钮,并且optionsMenu出现与combine选项时,在每个网格项目上动态绘制一个复选框,以便多选择一些非常类似Gallery的项目,但使用对象而不是图像,然后将它们组合起来 我使用的是API级别8,所以多选模式给我带来了困难 此外,如果有人对如何实现这一功能性而不是使用复选框有更好的建议,我肯定会接受。先发

我正在开发一个游戏,我有一个目录作为GridView。每个网格项目都是一个游戏对象,在单击时被选中。游戏表明,用户可以选择单个对象或组合对象

我需要的是非常具体的:我希望当用户按下菜单按钮,并且optionsMenu出现与combine选项时,在每个网格项目上动态绘制一个复选框,以便多选择一些非常类似Gallery的项目,但使用对象而不是图像,然后将它们组合起来

我使用的是API级别8,所以多选模式给我带来了困难

此外,如果有人对如何实现这一功能性而不是使用复选框有更好的建议,我肯定会接受。先发制人

以下是网格项的xml:

<ImageView
    android:id="@+id/grid_item_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

<CheckBox
    android:id="@+id/image_check"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:visibility="invisible" />
我尝试更改复选框Visibility Dynamicly的方式:

一,

二,

3个选项 从画廊选择改编 方法1: 选中后,只需在单元格的位图上画一个复选框。未选中“切换”时绘制原始图形。 如何使用此代码:

  private Bitmap drawCheck(Bitmap bmp)
  {
   Bitmap bmChecked = Bitmap.createBitmap(bmp.getWidth(),     bmp.getHeight(), bmp.getConfig());
   Bitmap check = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.upcheck);
   Canvas canvas = new Canvas(bmChecked);

   canvas.drawBitmap(bmp, 0, 0, null);
   canvas.drawBitmap(check, 0, 0, null); 
   return bmChecked;
  }
方法2 使用优秀的

然后:

将选定标志添加到LoadeImage类, 在onItemClick函数中,我将单击的项目标记为选中 在适配器的getView中,使用标志设置图像背景 它起作用了

方法3:可检查接口 看一看-他们使用一个自定义布局类,该类实现了可检查的界面,并在选中的项目上设置了一个可绘制的彩色背景。

3选项 从画廊选择改编 方法1: 选中后,只需在单元格的位图上画一个复选框。未选中“切换”时绘制原始图形。 如何使用此代码:

  private Bitmap drawCheck(Bitmap bmp)
  {
   Bitmap bmChecked = Bitmap.createBitmap(bmp.getWidth(),     bmp.getHeight(), bmp.getConfig());
   Bitmap check = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.upcheck);
   Canvas canvas = new Canvas(bmChecked);

   canvas.drawBitmap(bmp, 0, 0, null);
   canvas.drawBitmap(check, 0, 0, null); 
   return bmChecked;
  }
方法2 使用优秀的

然后:

将选定标志添加到LoadeImage类, 在onItemClick函数中,我将单击的项目标记为选中 在适配器的getView中,使用标志设置图像背景 它起作用了

方法3:可检查接口
看一看-他们使用一个自定义布局类,该类实现了可检查的界面,并在已检查的项目上设置了一个可绘制的彩色背景。

发布一些代码来显示您尝试过的不起作用的内容会很有帮助。目前我的代码有点凌乱,这就是为什么我没有发布任何代码的原因。我可以告诉您,我使用了一个扩展BaseAdapter的自定义适配器,并且我有一个用于清单的自定义活动类。我更改OnPrepareOptions菜单中的复选框可见性。我不确定是否必须,以及在此之后如何刷新gridView。您是否尝试过循环网格中的每个子对象?你真的明白你的问题是什么吗?您在引用孩子时遇到问题吗?或者?如果我将默认可见性设置为true,则每个孩子都会选中该复选框。但是,如果我尝试动态更改可见性,它将不起作用。发布一些代码来显示您尝试过但不起作用的内容会很有帮助。目前我的代码有点凌乱,这就是为什么我没有发布任何代码的原因。我可以告诉您,我使用了一个扩展BaseAdapter的自定义适配器,并且我有一个用于清单的自定义活动类。我更改OnPrepareOptions菜单中的复选框可见性。我不确定是否必须,以及在此之后如何刷新gridView。您是否尝试过循环网格中的每个子对象?你真的明白你的问题是什么吗?您在引用孩子时遇到问题吗?或者?如果我将默认可见性设置为true,则每个孩子都会选中该复选框。但是,如果我尝试动态地改变可见性,它将不起作用。我已经尝试了方法3,但是,正如我前面提到的,我使用的是API 8,并且在多选模式方面存在问题。不过我会尝试其他两种方法。谢谢你的回答。我已经尝试了方法3,但是,正如我之前提到的,我使用的是API 8,并且在多选模式方面有问题。不过我会尝试其他两种方法。谢谢你的回答。
public boolean onKeyDown(int keycode, KeyEvent e) {
    switch (keycode) {
    case KeyEvent.KEYCODE_MENU:
        openOptionsMenu();
        gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
        gridView.refreshDrawableState();
        return true;
    }

    return super.onKeyDown(keycode, e);
}
public boolean onPrepareOptionsMenu(Menu menu) {
            gameObjectAdapter.holder.gameItemCheck.setVisibility(View.VISIBLE);
            gameObjectAdapter.notifyDataSetChange();
    return true;

}
  private Bitmap drawCheck(Bitmap bmp)
  {
   Bitmap bmChecked = Bitmap.createBitmap(bmp.getWidth(),     bmp.getHeight(), bmp.getConfig());
   Bitmap check = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.upcheck);
   Canvas canvas = new Canvas(bmChecked);

   canvas.drawBitmap(bmp, 0, 0, null);
   canvas.drawBitmap(check, 0, 0, null); 
   return bmChecked;
  }