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