带有arrayadapter的ListView中带有单选按钮的行

时间:2013-03-14 11:20:06

标签: android-listview

我遇到了以下问题,我尝试创建一个框架,您可以从中添加一个按钮,其中包含由几个单选按钮组成的新视图radiogroup。 麻烦在于我的代码,我发现了不需要的行为,例如: 当我添加更多行时,如果第一个我检查rabiobuttons,我向下滚动然后我向上滚动我的屏幕去看我的第一行...我的radionbutton未经检查(所以回收问题的视图,而我强制备份数据在我的代码中) 当我检查一个单选按钮并通过我之前提到的按钮添加新行时,那时会自动检查或打开一些单选按钮。

这是我的代码,你能告诉我我的错误在哪里吗?

我的框架:

    final ViewGroup root = (ViewGroup) inflater.inflate(
            R.layout.slide_cavite, null);
    listview_cavite = (ListView) root.findViewById(R.id.listview_cavite);
    // Arbre.table_cavite.open();

    adaptor = new Adaptor_cavite_item(root.getContext(),
            R.layout.slide_item_cavite, Arbre.liste_cavite);
    listview_cavite.setAdapter(adaptor);
    ajouter_cavite = (Button) root.findViewById(R.id.ajouter_cavite);
    ajouter_cavite.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            //Arbre.liste_cavite.add(new Donnees_cavite());
            adaptor.add(new Donnees_cavite(root.getContext()));
            adaptor.notifyDataSetChanged();
        }
    });

连续表示的数据对象:

    public class Donnees_cavite {


        int rb_excrement_checked;

        public int get_rb_excrement_checked() {
        return rb_excrement_checked;
        }

        public void setFirstChecked(int firstChecked) {
        this.rb_excrement_checked = firstChecked;
        }


        public Donnees_cavite(Context context){
            this.rb_excrement_checked = -1;
        }

    }

我的自定义arrayadapter:

    public class Adaptor_cavite_item extends ArrayAdapter<Donnees_cavite> {

        int layoutResourceId;
        Holder holder;
        ArrayList<Donnees_cavite> liste;
        private LayoutInflater mInflater;

        ...

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


            if (row == null) {

                row = mInflater.inflate(R.layout.slide_item_cavite, null);

                holder = new Holder();

                holder.excrement = (RadioGroup) row.findViewById(R.id.slide_cavite_excrement);
                holder.excrement_1 = (RadioButton) row.findViewById(R.id.slide_cavite_excrement_rb1);
                holder.excrement_2 = (RadioButton) row.findViewById(R.id.slide_cavite_excrement_rb2);

                row.setTag(this.holder);

            }else{
                this.holder = (Holder) row.getTag();
            }


            holder.excrement.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(RadioGroup arg0, int arg1) {
                    // TODO Auto-generated method stub
                    switch (arg1) {
                    case R.id.slide_cavite_excrement_rb1:
                        liste.get(position).setFirstChecked(1);
                        break;

                    case R.id.slide_cavite_excrement_rb2:
                        liste.get(position).setFirstChecked(2);
                        break;
                    }
                }
            });


            if (liste.get(position).get_rb_excrement_checked() == 1){
                holder.excrement_1.setChecked(true);
                holder.excrement_2.setChecked(false);
            }else{
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(true);
            }

            return row;

        }

        static class Holder {
            RadioGroup excrement;
            RadioButton excrement_1,excrement_2; 

            }
        }

    }

            if (liste.get(position).get_rb_excrement_checked() == 1){
                holder.excrement_1.setChecked(true);
                holder.excrement_2.setChecked(false);
            }else if (liste.get(position).get_rb_excrement_checked() == 2){
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(true);
            }else{
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(false);
            }

感谢您的帮助!

编辑:最糟糕的是,如果我在arrayadapter的末尾替换这段代码:

if (liste.get(position).get_rb_excrement_checked() == 1){
                holder.excrement_1.setChecked(true);
                holder.excrement_2.setChecked(false);
            }else if (liste.get(position).get_rb_excrement_checked() == 2){
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(true);
            }else{
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(false);
}

通过

if (liste.get(position).get_rb_excrement_checked() == 1){
                holder.excrement_1.setChecked(true);
                holder.excrement_2.setChecked(false);
            }else{
                holder.excrement_1.setChecked(false);
                holder.excrement_2.setChecked(true);
}

不再有不必​​要的行为!一切正常..已经,我不明白为什么原始代码导致我的“错误”^ ^然后,好吧,这个代码工作..但它不适合我,因为我必须使用radiogroup 3,4 ... radiobutton ^^

0 个答案:

没有答案