1

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

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

我的框架的一部分:

    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;
        }

    }

还有我的自定义数组适配器:

    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);
            }

谢谢您的帮助!

编辑:最糟糕的是,如果我在我的数组适配器末尾替换这段代码:

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);
}

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

4

0 回答 0