Android GridView:GetCheckEditePositions()不返回任何值或错误的值

Android GridView:GetCheckEditePositions()不返回任何值或错误的值,android,gridview,checkbox,Android,Gridview,Checkbox,我使用包含复选框的网格视图实现了一个图库,但是我在getCheckedItemPositions()方法中遇到了问题 (1)如果我使用GridView启动活动,选择一些项目并询问选择了哪些项目,则getCheckEditePositions()方法不会返回任何值 (2)如果启动另一个活动,我将使用GridView返回到活动,并询问选择了哪些项目,getCheckEditePositions()方法将返回错误的值 首先,我认为getView()的实现是错误的,因为(1)GridView可能不知道选

我使用包含复选框的网格视图实现了一个图库,但是我在getCheckedItemPositions()方法中遇到了问题

(1)如果我使用GridView启动活动,选择一些项目并询问选择了哪些项目,则getCheckEditePositions()方法不会返回任何值

(2)如果启动另一个活动,我将使用GridView返回到活动,并询问选择了哪些项目,getCheckEditePositions()方法将返回错误的值

首先,我认为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));
    }
}

我认为问题不在于
复选框的
OnClickListener
。但是您可以尝试设置
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); 
        }
    });
找到了新的解决方案“变通方法”。上面的两个解决方案并没有解决这个问题,所以我决定直接使用适配器中使用的SparseBooleanArray来解决视图中复选框的问题。下面是Gallery片段中的代码:

private List<Resource> getCheckedItemOnGridView() {

    if(D) Log.d(TAG, "getCheckedItemOnGridView(): called");

    List<Resource> resources = new ArrayList<Resource>();
    // List of checked checkbox
    SparseBooleanArray checkedItemPositions = mAdapter.getCheckedItemPositions();

    for (int i=0 ; i<checkedItemPositions.size() ; i++) {
        if(checkedItemPositions.valueAt(i)) {
            if(D) Log.d(TAG, "getCheckedItemOnGridView(): item position checked: " + checkedItemPositions.keyAt(i));
            resources.add(mResources.get(checkedItemPositions.keyAt(i)));
        }
    }
    return (resources.isEmpty()) ? null : resources;
}
private List getCheckedItemOnGridView(){
if(D)Log.D(标记“getCheckedItemOnGridView():called”);
List resources=new ArrayList();
//复选框列表
SparseBooleanArray checkedItemPositions=mAdapter.getCheckedItemPositions();
对于(int i=0;i),如果有帮助,请检查此项
private List<Resource> getCheckedItemOnGridView() {

    if(D) Log.d(TAG, "getCheckedItemOnGridView(): called");

    List<Resource> resources = new ArrayList<Resource>();
    // List of checked checkbox
    SparseBooleanArray checkedItemPositions = mAdapter.getCheckedItemPositions();

    for (int i=0 ; i<checkedItemPositions.size() ; i++) {
        if(checkedItemPositions.valueAt(i)) {
            if(D) Log.d(TAG, "getCheckedItemOnGridView(): item position checked: " + checkedItemPositions.keyAt(i));
            resources.add(mResources.get(checkedItemPositions.keyAt(i)));
        }
    }
    return (resources.isEmpty()) ? null : resources;
}