如何在gridimage的Longclick上显示所有复选框
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在gridimage的Longclick上显示所有复选框相关的知识,希望对你有一定的参考价值。
我想通过图像的checkbox
使所有看不见的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;
}
我以前在mainactivity中使用了adapter
的对象。
GridAdapter = new GridViewAdapter(this, R.layout.grid_item_layout, getData());
gridView.setAdapter(gridAdapter);
// gridView.OnLongclick....
for(int index=0;index< adapterView.getChildCount();index++) {
View nextchild = (adapterView.getChildAt(index));
CheckBox checkBox = (CheckBox) nextchild.findViewById(R.id.checkbox);
checkBox.setVisibility(View.VISIBLE);
}
现在我希望一切都发生在adapter
类本身。提前致谢!
答案
您在适配器中使用的ViewHolder模式要求项目状态存在于数据本身中;直接在视图上操作(如在发布的示例中)将在滚动时导致奇怪的状态问题。 ViewHolder.onBind()方法(或自定义等效方法)需要能够根据数据元素正确设置是否选中复选框,因此应转换getData(),使每个项都有一个布尔isChecked字段。
或者,如果所有项目始终一起被选中或取消选中,则可能在适配器中有一个布尔字段,可用于在需要时选中onBind()框。适配器中的方法可以更改布尔值,然后notifyDataSetChanged()重新绑定所有内容。
如果我们可以看到更多的GridViewAdapter实现,可以提供更多细节。
另一答案
在你的适配器类中,取一个本地布尔值
boolean ischecked =false ;
在你的绑定方法中
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;
}
});
以上是关于如何在gridimage的Longclick上显示所有复选框的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Android WebView 中使用 HitTestResult 获取链接 URL,用于使用 Longclick 链接图像(而不是图像 URL)