次の問題が発生しました。いくつかのラジオボタンで構成される新しいビューのラジオグループを含むボタンに追加できるフレームを作成しようとしています..問題は私のコードにあります。行を追加します。最初の行をチェックすると、下にスクロールしてから画面を上にスクロールして、最初の行を表示します...私の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);
}
不要な動作はもうありません。すべてが機能します..元のコードがなぜ「バグ」を引き起こすのか、すでに理解できません^ ^そして、まあ、このコードは機能します..しかし、3,4 ...ラジオボタンでラジオグループを使用する必要があるため、それは私には合いません^^