【发布时间】:2014-01-16 11:23:23
【问题描述】:
我用包含复选框的网格视图实现了一个画廊,但我在 getCheckedItemPositions() 方法上遇到了问题。
(1) 如果我使用 GridView 启动 Activity,选择一些项目并询问已选择哪些项目,getCheckedItemPositions() 方法不会返回任何值。
(2) 如果我启动另一个 Activity,我会使用 GridView 返回 Activity 并询问已选择哪些项目,getCheckedItemPositions() 方法返回错误值。
我认为首先 getView() 的实现是错误的,因为 (1) 可能 GridView 不知道选择了哪些项目。我对 (2) 没有任何想法。
代码如下:
GalleryFragment getCheckedItemOnGridView():
private void getCheckedItemOnGridView() {
if(D) Log.d(TAG, "getCheckedItemOnGridView(): called");
SparseBooleanArray checkedItemPositions = mGalleryGridView.getCheckedItemPositions();
for (int i=0 ; i<checkedItemPositions.size() ; i++) {
if(D) Log.d(TAG, "checkedItemPositions : " + checkedItemPositions.valueAt(i) + " index " + checkedItemPositions.keyAt(i));
}
}
Adapter 扩展 BaseAdapter getView():
private SparseBooleanArray checked;
public View getView(final int position, View convertView, ViewGroup parent) {
if(D) Log.d(TAG, "Called: getView");
ViewHolder holder;
if (convertView == null) {
convertView = mLayoutInflater.inflate(R.layout.listitem_gallery, null);
holder = new ViewHolder();
holder.thumbnailView = (ImageView) convertView.findViewById(R.id.imageview_thumbnail);
holder.checkBoxView = (CheckBox) convertView.findViewById(R.id.checkbox);
holder.checkBoxView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (((CheckBox) view).isChecked()) {
checked.put((Integer) view.getTag(), true);
} else {
checked.put((Integer) view.getTag(), false);
}
}
});
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
BitmapFileImageLoader bitmapLoader = new BitmapFileImageLoader();
bitmapLoader.loadBitmap(getItem(position), holder.thumbnailView);
holder.checkBoxView.setTag(position);
holder.checkBoxView.setChecked(checked.get(position));
return convertView;
}
【问题讨论】:
-
stackoverflow.com/questions/17234399/…。看看这个是否有帮助