我需要在GridView
中选择多个图像,并在GridView
中添加共享和删除按钮。
MyImageAdapter
类别:
private class ImageAdapter extends BaseAdapter {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ImageView imageView;
CheckableLayout checkableLayout;
if (convertView == null) {
imageView = new ImageView(activity);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
checkableLayout = new CheckableLayout(activity);
imageView.setLayoutParams(new GridView.LayoutParams(imageWidth, imageWidth));
} else {
checkableLayout = (CheckableLayout) convertView;
imageView = (ImageView) checkableLayout.getChildAt(0);
}
bitmap = decodeFile(getItem(position), imageWidth, imageWidth);
imageView.setImageBitmap(bitmap);
imageView.setOnClickListener(new OnImageClickListener(position));
return imageView;
}
class OnImageClickListener implements View.OnClickListener {
int position;
public OnImageClickListener(int position) {
this.position = position;
}
@Override
public void onClick(View v) {
Intent intent = new Intent(activity, ImageDisplayActivity.class);
intent.putExtra("id", getPosition(position));
activity.startActivity(intent);
}
}
public class CheckableLayout extends FrameLayout implements Checkable {
private boolean mChecked;
public CheckableLayout(Context context) {
super(context);
}
@Override
public void setChecked(boolean checked) {
mChecked = checked;
setBackgroundDrawable(checked ? getResources().getDrawable(R.drawable.blue) : null);
}
@Override
public boolean isChecked() {
return mChecked;
}
@Override
public void toggle() {
setChecked(!mChecked);
}
}
public class MultiChoiceModeListener implements GridView.MultiChoiceModeListener {
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
int selectCount = gridView.getCheckedItemCount();
switch (selectCount) {
case 1:
mode.setSubtitle("One item selected");
break;
default:
mode.setSubtitle("" + selectCount + " items selected");
break;
}
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
mode.setTitle("Select Items");
mode.setSubtitle("One item selected");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return true;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
}
}
但是当我试图打开Gridview时,它给我一个错误。
我的Logcat细节
02-10 21:10:46.965 21658-21658/com.Android示例E/AndroidRuntime﹕ 致命异常:主进程:com.Android例如,PID:21658java。ClassCastException:android。小装置。无法将ImageView强制转换为com.Android实例GridViewActivity$CheckableLayout位于com.Android实例GridViewActivity$ImageAdapter。android上的getView(GridViewActivity.java:224)。小装置。AblistView。android上的获取视图(AbsListView.java:2255)。小装置。GridView。android上的onMeasure(GridView.java:1044)。看法看法在android上测量(View.java:16540)。小装置。相对论。android上的measureChild(RelativeLayout.java:689)。小装置。相对论。android上的onMeasure(RelativeLayout.java:473)。看法看法在android上测量(View.java:16540)。支持v4。小装置。抽屉布局。android上的onMeasure(DroperLayout.java:851)。看法看法在android上测量(View.java:16540)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5137)。小装置。框架布局。android上的onMeasure(FrameLayout.java:310)。看法看法在android上测量(View.java:16540)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5137)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1404)。小装置。线性布局。android上的measureVertical(LinearLayout.java:695)。小装置。线性布局。android上的onMeasure(LinearLayout.java:588)。看法看法在android上测量(View.java:16540)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5137)。小装置。框架布局。android上的onMeasure(FrameLayout.java:310)。看法看法在android上测量(View.java:16540)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5137)。小装置。线性布局。android上的measureChildBeforeLayout(LinearLayout.java:1404)。小装置。线性布局。android上的measureVertical(LinearLayout.java:695)。小装置。线性布局。android上的onMeasure(LinearLayout.java:588)。看法看法在android上测量(View.java:16540)。看法视图组。android上的measureChildWithMargins(ViewGroup.java:5137)。小装置。框架布局。com上的onMeasure(FrameLayout.java:310)。Android内部的政策impl。电话窗口$DecorView。android上的onMeasure(PhoneWindow.java:2291)。看法看法在android上测量(View.java:16540)。看法ViewRootImpl。android上的performMeasure(ViewRootImpl.java:1942)。看法ViewRootImpl。android上的measureHierarchy(ViewRootImpl.java:1132)。看法ViewRootImpl。android上的performTraversals(ViewRootImpl.java:1321)。看法ViewRootImpl。android上的doTraversal(ViewRootImpl.java:1019)。看法ViewRootImpl$TraversalRunnable。在android上运行(ViewRootImpl.java:5725)。看法编舞$CallbackRecord。在android上运行(Choreographer.java:761)。看法编舞android上的doCallbacks(Choreographer.java:574)。看法编舞android上的doFrame(Choreographer.java:544)。看法Choreographer$FrameDisplayEventReceiver。在android上运行(Choreographer.java:747)。操作系统。处理程序。android上的handleCallback(Handler.java:733)。操作系统。处理程序。android上的dispatchMessage(Handler.java:95)。操作系统。活套。android上的loop(Looper.java:136)。应用程序。活动线程。java上的main(ActivityThread.java:5086)。朗。反思。方法在com上调用(本机方法)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:785)。Android内部的操作系统。合子体。main(ZygoteInit.java:601)
android.widget.ImageView不能转换为com.android.example.GridViewActive$CheckableLayout
因为您正在从getView
返回ImageView
,但试图将其转换为此行中的CheckableLayout
:
checkableLayout = (CheckableLayout) convertView;
从getView()
方法返回checkableLayout
:
@Override
public View getView(final int position,
View convertView, ViewGroup parent) {
final ImageView imageView;
CheckableLayout checkableLayout;
if (convertView == null) {
imageView = new ImageView(activity);
// your code here ...
// add ImageView to checkableLayout
checkableLayout.addView(imageView);
} else
checkableLayout = (CheckableLayout) convertView;
imageView = (ImageView) checkableLayout.getChildAt(0);
// your code here ...
return checkableLayout;
}
您应该从getView
方法返回convertView
。
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// code here
convertview.addView(checkableLayout);
return convertView;
}
如何实现类?
本文向大家介绍el-select 下拉框多选实现全选的实现,包括了el-select 下拉框多选实现全选的实现的使用技巧和注意事项,需要的朋友参考一下 在写一个功能时发现el-select支持多选,但是竟然不支持全选,好无语哦,那就自己实现一下吧~有两种方法,第二种感觉简单些 方法一:下拉项增加一个【全选】,然后应该有以下几种情况: 下拉选项全都勾选时,【全选】自动勾选; 下拉选项部分勾选时,点击
本文向大家介绍Vue实现多标签选择器,包括了Vue实现多标签选择器的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Vue实现多标签选择器展示的具体代码,供大家参考,具体内容如下 实现效果 实现代码 标签筛选的数据格式 data.js 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
本文向大家介绍vue实现单选和多选功能,包括了vue实现单选和多选功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了vue实现单选和多选功能的具体代码,供大家参考,具体内容如下复制代码 vue实现多选功能 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
我先用代码。我正在尝试在Asp中实现多对多关系。具有的net core。净额6。 我的订单型号: 我的产品型号: 当我尝试更新数据库时,出现以下错误:
1.在移动目标和来源在同一分区(如都在C盘)是可以用 Rename语句 和 执行命令行Move 实现: OutFile "Test.EXE" Name "Test" Section Rename "C:\Program Files\Test.txt" "C:\Test.txt" SectionEnd 2.在不同分区可以使用命令行的Move命令: OutFile "Test.EXE" Name "