Android GridView:GetCheckEditePositions()不返回任何值或错误的值
我使用包含复选框的网格视图实现了一个图库,但是我在getCheckedItemPositions()方法中遇到了问题 (1)如果我使用GridView启动活动,选择一些项目并询问选择了哪些项目,则getCheckEditePositions()方法不会返回任何值 (2)如果启动另一个活动,我将使用GridView返回到活动,并询问选择了哪些项目,getCheckEditePositions()方法将返回错误的值 首先,我认为getView()的实现是错误的,因为(1)GridView可能不知道选择了哪些项。相反,我对第(2)部分没有任何想法 代码如下: GalleryFragment getCheckedItemOnGridView():Android GridView:GetCheckEditePositions()不返回任何值或错误的值,android,gridview,checkbox,Android,Gridview,Checkbox,我使用包含复选框的网格视图实现了一个图库,但是我在getCheckedItemPositions()方法中遇到了问题 (1)如果我使用GridView启动活动,选择一些项目并询问选择了哪些项目,则getCheckEditePositions()方法不会返回任何值 (2)如果启动另一个活动,我将使用GridView返回到活动,并询问选择了哪些项目,getCheckEditePositions()方法将返回错误的值 首先,我认为getView()的实现是错误的,因为(1)GridView可能不知道选
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;
}