当我用自定义SimpleCursorAdapter在ListView中的一行检查RadioButton时,另一行也被检查



在我的ListView的每一行中,我有一个RadioGroupRadioButton s。

从数据库中我得到五行,当我检查第一行中的RadioButtons然后滚动时,我看到第三行也被检查(在屏幕上,而不是数据库上)。

当我在第二行选中RadioButtons时,第四行也会被选中。

屏幕上放置了1、5行。

public void bindView(View view, Context _context, Cursor _cursor) {
    String id=_cursor.getString(_cursor.getColumnIndex("_id"));
    RadioButton RightRadio=(RadioButton)view.findViewById(R.id.RightRadio);
    RightRadio.setOnClickListener(radioListener);
    RightRadio.setTag(id);
    RadioButton LeftRadio=(RadioButton)view.findViewById(R.id.LeftRadio);
    LeftRadio.setOnClickListener(radioListener);
    LeftRadio.setTag(id);
    RadioButton UpRadio=(RadioButton)view.findViewById(R.id.UpRadio);
    UpRadio.setOnClickListener(radioListener);
    UpRadio.setTag(id);
    RadioButton DownRadio=(RadioButton)view.findViewById(R.id.DownRadio);
    DownRadio.setOnClickListener(radioListener);
    DownRadio.setTag(id);
    int oper=getOperByid(id);
    switch (oper) {
        case 1:
            RightRadio.setChecked(true);
            break;
        case 3:
            LeftRadio.setChecked(true);
            break;
        case 4:
            UpRadio.setChecked(true);
            break;
        case 2:
            DownRadio.setChecked(true);
            break;
     }
     if (portrait) {
         LeftRadio.setVisibility(View.GONE);
         RightRadio.setVisibility(View.GONE);
         UpRadio.setVisibility(View.VISIBLE);
         DownRadio.setVisibility(View.VISIBLE);
     } else {
         UpRadio.setVisibility(View.GONE);
         DownRadio.setVisibility(View.GONE);
         LeftRadio.setVisibility(View.VISIBLE);
         RightRadio.setVisibility(View.VISIBLE);
     }
}

在gridview和listview中的复选框和单选按钮有一些问题,在你的适配器中这样做,声明一个数组列表来保存你的单选按钮的选中位置

private ArrayList<Boolean> itemChecked = new ArrayList<Boolean>();

适配器构造函数:-

public YourAdapter(Context context, ArrayList<String> mlist) 
{
......your other intializations;
for (int i = 0; i < this.getCount(); i++) 
 {
 itemChecked.add(i, false/true);
 }
}

根据位置的值初始化为false或true,并在bindview方法中获得值:-

radiobutton.setChecked(itemChecked.get(position));

以这种方式使用开关机制:

    switch(oper) {
    case 1:
        if (checked)
            RightRadio.setChecked(true);
        break;
    case 2:
        if (checked)
            DownRadio.setChecked(true);
        break;
    }
}
有关详细的演示和解释,请参见:单选按钮

最新更新