Android Listview和交换机

Android Listview和交换机,android,android-listview,Android,Android Listview,我对ArrayAdapter感到困惑。我有一个列表视图,由子视图组成 每个子视图包含一个txtview和一个开关 现在,我可以打印出包含我的项目的所有列表,但我有两个问题: 当我打开开关时,如果我向下滚动并返回,开关将关闭 我不知道如何得到所有的开关。事实上,我希望能够同时打开所有开关 以下是我所拥有的: public class PersAjoutOpAdapter extends ArrayAdapter { static class ViewHolder {

我对ArrayAdapter感到困惑。我有一个列表视图,由子视图组成

每个子视图包含一个txtview和一个开关

现在,我可以打印出包含我的项目的所有列表,但我有两个问题:

  • 当我打开开关时,如果我向下滚动并返回,开关将关闭
  • 我不知道如何得到所有的开关。事实上,我希望能够同时打开所有开关
以下是我所拥有的:

public class PersAjoutOpAdapter extends ArrayAdapter {

    static class ViewHolder {
        public TextView txt_pers;
        public Switch switch_pers;
    }

    private LayoutInflater inflater;
    private boolean tous_coches = false;
    private ImageView img_check_all_pers_op;
    private ArrayList<Boolean> v_switchs;
    private boolean en_train_de_checker_all;

    public PersAjoutOpAdapter(Context p_context, ImageView p_img_check_all_pers_op) {
        super(p_context, R.layout.item_pers_ajout_op, Friendly_Account.projet_actu.getPers_dans_projet());

        inflater = LayoutInflater.from(p_context);
        img_check_all_pers_op = p_img_check_all_pers_op;

        v_switchs = new ArrayList<Boolean>(Friendly_Account.projet_actu.getPers_dans_projet().size());

        for (int i=0 ; i<Friendly_Account.projet_actu.getPers_dans_projet().size() ; i++) {
            v_switchs.add(i, false);
        }
    }

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {

        final ViewHolder holder;

        View rowView = convertView;
        if (rowView == null) {
            rowView = inflater.inflate(R.layout.item_pers_ajout_op, null);

            holder = new ViewHolder();
            holder.txt_pers = (TextView) rowView.findViewById(R.id.item_pers_ajout_op_prenom_nom);
            holder.switch_pers = (Switch) rowView.findViewById(R.id.item_pers_ajout_op_switch);
            rowView.setTag(holder);

            holder.switch_pers.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                @Override
                public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                }
            });

        }else {
            holder = (ViewHolder) rowView.getTag();
        }

        Personne pers = Friendly_Account.projet_actu.getPers_dans_projet().get(position);

        holder.txt_pers.setText(pers.getPrenom());

        holder.switch_pers.setChecked(v_switchs.get(position));

        return rowView;
    }
public类PersAjoutOpAdapter扩展了ArrayAdapter{
静态类视窗夹{
公共文本视图;
公共开关;
}
私人充气机;
私有布尔tous_coches=false;
私人图像查看图像检查所有人操作;
专用阵列列表v_开关;
私有布尔值列检查程序;
公共PersAjoutOpAdapter(上下文p_Context,图像视图p_img_check_all_pers_op){
super(p_context,R.layout.item_pers_ajout_op,Friendly_Account.projet_actu.getPers_dans_projet());
充气器=从(p_上下文)开始的充气器;
img_check_all_pers_op=p_img_check_all_pers_op;
v_switchs=newarraylist(友好的账户.projet_actiu.getPers_dans_projet().size());

对于(int i=0;ilist view回收视图。您需要一种方法来维护状态OK,我想制作一个布尔数组列表来“保存”每个对象的状态。这是一种好方法还是有更好的方法?使用稀疏布尔数组。我几乎能理解,谢谢。当有开关时,我需要将状态保存为稀疏布尔(对吗?)。我该怎么做?在getview中,我有一个
setOnCheckedChangeListener
,但我不知道开关的位置否?适用于复选框的相同概念也适用于开关。请遵循解决方案