SparseBooleanArray 没有任何名为 indexOf 的方法。
如果您只想存储检查状态,我建议您使用ListView 的内置方法setItemChecked(int position, boolean value)。
在您的getView() 中,您可以查看是否检查了某个位置(或者在您的情况下,您的开关的状态是打开还是关闭),如下所示:
ListView listView = (ListView)parent; //get the listview
listView.setItemChecked(itemPosition, true); //set position as checked
listView.isItemChecked(position); //check if position is checked (switch is ON)
确保您在ListView 上拨打此电话:
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
更新 1:
在您的代码中:
-
在holder.switchItem = (Switch) convertView.findViewById(R.id.switchItem);之后,添加这段代码:
final ListView listView = (ListView)parent;
//add listener
holder.switchItem.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
listView.setItemChecked(position, isChecked);
}
});
-
将holder.switchItem.setOnCheckedChangeListener(switchItemOnCheckedChangeListener); 替换为:
//restore switch state
holder.switchItem.setChecked(listView.isItemChecked(position));
-
删除以下代码:
SparseBooleanArray checkedItems = new SparseBooleanArray();
if (checkedItems.indexOf(accountList.get(position).toString()) >= 0) {
holder.switchItem.setChecked(true);
}
更新 2:
这是我的适配器的样子:
@Override
public int getCount() {
return 50;
}
@Override
public String getItem(int position) {
return String.valueOf(position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder holder;
final ListView listView = (ListView)parent;
if(convertView == null || convertView.getTag() == null) {
convertView = mInflator.inflate(R.layout.list_item, parent, false);
holder = new Holder();
holder.switch1 = (Switch) convertView.findViewById(R.id.switch1);
holder.switch1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
listView.setItemChecked(position, isChecked);
}
});
}
else {
holder = (Holder) convertView.getTag();
}
holder.switch1.setText(getItem(position));
//restore switch state
holder.switch1.setChecked(listView.isItemChecked(position));
return convertView;
}
这就是我在ListActivity 中设置列表视图的方式:
setListAdapter(new MyAdapter(this));
getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);