我遇到了以下问题,我尝试创建一个框架,您可以从中添加一个按钮,其中包含由几个单选按钮组成的新视图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 ^^