android - GridView:getCheckedItemPositions() 不返回值或返回错误值

标签 android gridview checkbox

我实现了一个带有包含复选框的 GridView 的图库,但我在使用 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));
    }
}

适配器扩展 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;
}

最佳答案

我认为问题不在于 CheckBoxOnClickListener。但您可以尝试设置 OnCheckedChangeListener 而不是 OnClickListener...

    holder.checkBoxView.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            int position = (Integer) buttonView.getTag();
            checked.put(position, isChecked); 
        }
    });

关于android - GridView:getCheckedItemPositions() 不返回值或返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20824901/

相关文章:

c# - 深度复制 ASP.NET GridView

c# - Windows 商店中的非公共(public)成员(member)访问权限

android - 实现自定义 ListView 的复选框

angular - Material Angular 选择所有复选框

android - native 应用程序直接与数据库对话

c# - 从 aspx 页面上的 URL 获取参数

android - Intent 在 NavigationDrawerFragment 中不起作用

java - 如何使用变量从布局调用方法

由于 shrinkReleaseMultiDexComponents,Android 版本构建失败

android - 连接以从两个表中获取数据