【问题标题】:Clear all selected items in a gridview清除网格视图中的所有选定项目
【发布时间】:2015-09-09 07:44:10
【问题描述】:

我在带有 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;
}

【问题讨论】:

  • 您从adapter 执行此操作,imo 更好的方法是从列表所在的activity/fragment 执行此操作。我对 listView 也有类似的情况,而且效果很好。只需在项目的onClick 的活动/片段中调用一个函数,然后在那里运行取消选择循环。
  • 在我尽力帮助您的同时,请将您的 onClick 处理函数的前 6 行更改为 child.get(position).setChecked(!isChecked) 吗?用这些台词很难专注于问题。

标签: java android gridview arraylist expandablelistview


【解决方案1】:

尝试从包含列表的活动或片段中调用listView.clearChoices();adapter.notifyDataSetChanged();,而不是在适配器内部。

【讨论】:

  • listView.clearChoices() 之后调用adapter.notifyDataSetChanged() 怎么样?另一个选择是 listView.setSelected() 方法。
  • 我只是错过了 notifyDataSetChanged();
【解决方案2】:

您的问题是先调用child.size,它返回1。
您正在从不同的角度获取孩子的数量。

@Override
public int getCount() {
    return child.size();
}

如果你在你使用OnClickListener的地方调用child.size()

public void onClick(final View v) {

您应该遍历列表的数组适配器,因为如果列表是可滚动的,则视图的 child.counts 将不同于选中的列表项的数量。因为视图中的项目(它们被回收)比列表中的要少。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多