选择所有ListViewItem

时间:2015-04-29 13:58:32

标签: android listview checkbox onclicklistener

我收到了ListActivity我创建的列表项。每个项目都有一个CheckBox。此外,布局有一个按钮,假设只是检查所有复选框,但即使正在调用按钮的OnClickListener它也无法正常工作。

这是从列表适配器调用的方法:

    public void ChangeAllCheckStatus(boolean checked)
    {
        synchronized (items)
        {
            for (ItemData item : items)
            {
                item.checked= checked;
            }
        }
        notifyDataSetChanged();
    }

这是getView方法:

@Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View vi = convertView;
        if (vi == null)
        {
            vi = m_inflater.inflate(R.layout.myItem, null);
        }
        TextView nameTextView = (TextView) vi.findViewById(R.id.firstText);
        TextView addressTextView = (TextView) vi.findViewById(R.id.secondText);
        CheckBox cb = (CheckBox) vi.findViewById(R.id.the_checkBox);
        nameTextView.setText(items.get(position).string1);
        addressTextView.setText(items.get(position).string2);
        cb.setSelected(items.get(position).checked);
        return vi;
    }

我是如何检查所有复选框的?

2 个答案:

答案 0 :(得分:2)

您无法从适配器获取视图。 ListView就是这样做的。

相反,你可以通过这样的ListView循环它们:

ListView lv;
int itemCount = lv.getCount();
for (int i=0; i<itemCount; ++i) {
    CheckBox cb = (CheckBox) lv.getChildAt(i).findViewById(R.id.the_checkBox);
    cb.setChecked(true);
}

答案 1 :(得分:1)

 listItem = myList.getAdapter().getView(i, null, null);

错了。您不应直接访问ListView项。您应该封装数据集中每个项目的已检查状态,并让getView使其工作。

假设您的boolean status;项目中有ListView成员,您可以在适配器中添加方法,

public void checkAll() {
  synchronized(items) {
    for (Item item : items) {
       item.status = true;
    }
  }
  notifyDataSetChanged();
}

编辑:

  

它有一个扩展BaseAdapter的适配器,它也接收2   字符串数组作为值。它创建特定的视图   只需设置2个带有相应值的文本框即可定位   来自这两个阵列。

您可以使用一个封装所需信息的小类,而不是拥有两个数组。 E.g

public class Item {
  public String mFirstString; 
  public String mSecondString;  
  public boolean mStatus;
} 

并向BaseAdapter提供此类的集合。 E.g

ArrayList<Item> mItems = new ArrayList<>();

getItem将返回mItem.get(position),在getView上您将设置文本和复选框。 E.g。

 Item item = getItem(position);
 CheckBox cb = (CheckBox) rootView.findViewById(R.id.the_checkBox);
 cb.setChecked(item.mStatus);