清除网格视图中的所有选定项目
Clear all selected items in a gridview
我在 CHOICE_MODE_MULTIPLE 的 ExpandableListView 中有一个 gridview,我试图在按下按钮时取消选择所有项目,但我这样做的方式只是取消选择最后一个项目,如何我可以清除所有这些吗?
@Override
public int getCount() {
return child.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
final View finalConvertView = convertView;
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isChecked = child.get(position).isChecked();
if (!isChecked) {
child.get(position).setChecked(true);
} else {
child.get(position).setChecked(false);
}
ex.findViewById(R.id.notificar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
//clear all selected items
for(int i = 0; i< getCount(); i++){
child.get(i).setChecked(false);
}
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(child.get(position).getNome());
return convertView;
}
}
}
static class ViewHolder {
TextView text;
}
你的问题是先调用 child.size
,它返回 1。
您正在从不同的视图获取子项计数。
@Override
public int getCount() {
return child.size();
}
如果您在 OnClickListener
内调用 child.size()
,您正在使用
public void onClick(final View v) {
您应该遍历列表的数组适配器,因为如果列表是可滚动的,视图的 child.counts 将不同于选中列表项的数量。因为视图中的项目(它们被回收)少于列表中的项目。
尝试从 activity 或包含列表的片段调用 listView.clearChoices();
和 adapter.notifyDataSetChanged();
,而不是在适配器内部。
我在 CHOICE_MODE_MULTIPLE 的 ExpandableListView 中有一个 gridview,我试图在按下按钮时取消选择所有项目,但我这样做的方式只是取消选择最后一个项目,如何我可以清除所有这些吗?
@Override
public int getCount() {
return child.size();
}
@Override
public Object getItem(int position) {
return position;
}
@Override
public long getItemId(int arg0) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
holder = null;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.child_item, null);
holder = new ViewHolder();
holder.text = (TextView) convertView.findViewById(R.id.name);
convertView.setTag(holder);
final View finalConvertView = convertView;
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
isChecked = child.get(position).isChecked();
if (!isChecked) {
child.get(position).setChecked(true);
} else {
child.get(position).setChecked(false);
}
ex.findViewById(R.id.notificar).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
//clear all selected items
for(int i = 0; i< getCount(); i++){
child.get(i).setChecked(false);
}
}
});
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.text.setText(child.get(position).getNome());
return convertView;
}
}
}
static class ViewHolder {
TextView text;
}
你的问题是先调用 child.size
,它返回 1。
您正在从不同的视图获取子项计数。
@Override
public int getCount() {
return child.size();
}
如果您在 OnClickListener
内调用 child.size()
,您正在使用
public void onClick(final View v) {
您应该遍历列表的数组适配器,因为如果列表是可滚动的,视图的 child.counts 将不同于选中列表项的数量。因为视图中的项目(它们被回收)少于列表中的项目。
尝试从 activity 或包含列表的片段调用 listView.clearChoices();
和 adapter.notifyDataSetChanged();
,而不是在适配器内部。