我有一个带有 checkbox
, imageView
和 textView
的自定义GridView . 在 gridViewAdapter.getView()
中,我使用行和持有者来初始化checkbox,imageView和textview的值 .
现在当我点击复选框时,我需要获取该gridView项的位置,这样我就可以将图像从它的位置移动到gridView中的另一个位置 .
我试过这样的:
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
ViewHolder holder = null;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.imageTitle = (TextView) row.findViewById(R.id.textView);
holder.image = (ImageView) row.findViewById(R.id.imageView);
holder.cb=(CheckBox)row.findViewById(R.id.checkBox);
holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//here with this checkbox which just got clicked,
// i want to access its gridview position or holder index
// so i can get access to the image
}
});
row.setTag(holder);
} else {
holder = (ViewHolder) row.getTag();
}
ImageItem item = (ImageItem)dataArraylist.get(position);
holder.imageTitle.setText(item.getTitle());
holder.image.setImageBitmap(item.getImage());
// holder.cb.setChecked(item.isSelected());
return row;
}
public static class ViewHolder {
public TextView imageTitle;
public ImageView image;
public CheckBox cb;
}
更新:ok getView函数的参数“position”工作正常 . public View getView(int position,View convertView,ViewGroup parent){} . 但是现在当我在第一个视图中选中复选框时,复选框的位置会正确返回 . 但是当我向下滚动到下一个视图时,复选框的位置是随机的 . 怎么解决这个?
public View getView(int position, View convertView, final ViewGroup parent) {
final int pos=position;
ViewHolder holder = null;
if (convertView == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
convertView = inflater.inflate(layoutResourceId, parent, false);
holder = new ViewHolder();
holder.image = (ImageView) convertView.findViewById(R.id.imageView);
holder.cb=(CheckBox)convertView.findViewById(R.id.checkBox);
if(flag) {
holder.cb.setVisibility(View.VISIBLE);
holder.cb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("MYLOG", "position: "+pos);
ImageItem tempObj;
ImageItem item = clickedArraylist.get(pos);
if(item.isSelected())
item.setSelected(false);
else
item.setSelected(true);
notifyDataSetChanged();
}
});
}
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
holder.cb.setOnCheckedChangeListener(null);
}
ImageItem item = clickedArraylist.get(position);
holder.image.setImageBitmap(item.getImage());
holder.cb.setChecked(item.isSelected());
return convertView;
}
public static class ViewHolder {
public ImageView image;
public CheckBox cb;
}
3 回答
一个非常简单的解决方案是将
tag
设置为view
并在单击时获取它,如下所示:然后用这个职位做你想做的事 . 如果您在实施时遇到问题,请告诉我 .
OMG这个工作:以下链接的第一个答案ListView in ArrayAdapter order get's mixed up when scrolling
只需要在膨胀视图后立即关闭if(convertView == null)并删除其中的else部分
解决方案非常简单 . 这是我在我的一个应用程序中实现的代码 .
完成后,您可以使用适配器类中的此功能访问列表
现在来自您的Activity类调用
完成!