在Listview Android中滚动时,开关更改为ON-OFF

时间:2015-01-23 10:34:30

标签: android listview switch-statement

我有一个带开关的ListView。每当我打开开关并向下滚动并向上滚动时,开关就会切换到关闭状态。

3 个答案:

答案 0 :(得分:3)

将它放入自定义适配器..

//当这些视图被重新启动时,这两种方法可以在没有开关打开/关闭的情况下滚动     //这些方法实际上告诉适配器不回收行,因此可能会降低进程的速度

@Override
public int getViewTypeCount() {

    return getCount();
}

@Override
public int getItemViewType(int position) {

    return position;
}

答案 1 :(得分:0)

我在ListView s遇到了这个问题。试试这个

if(checkedItems.indexOf(accountList.get(position).toString()) >= 0) {
    holder.switchItem.setChecked(true);
}
else {
    holder.switchItem.setChecked(false);
}

您正在使用它之前初始化checkedItems。它目前是空的。如果没有任何内容,怎么能做indexOf。

这可以解决您的问题

答案 2 :(得分:0)

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:

在您的代码中:

  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);
        }
    });
    
  2. holder.switchItem.setOnCheckedChangeListener(switchItemOnCheckedChangeListener);替换为:

    //restore switch state
    holder.switchItem.setChecked(listView.isItemChecked(position));
    
  3. 删除以下代码:

    SparseBooleanArray checkedItems = new SparseBooleanArray();
    if (checkedItems.indexOf(accountList.get(position).toString()) >= 0) {
    
        holder.switchItem.setChecked(true);
    }
    
  4. 更新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);