当我使用自定义SimpleCursorAdapter在ListView中检查一行中的单选按钮时,另一行也会被检查

时间:2014-07-26 03:49:51

标签: android android-cursoradapter

ListView的每一行中,我有RadioGroup RadioButton 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);
     }
}

2 个答案:

答案 0 :(得分:2)

gridview和listview中的复选框和单选按钮存在一些问题,在你的适配器中这样做,声明一个arraylist来保持你的radiobuttons的检查位置

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

答案 1 :(得分:0)

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

    switch(oper) {
    case 1:
        if (checked)
            RightRadio.setChecked(true);
        break;
    case 2:
        if (checked)
            DownRadio.setChecked(true);
        break;
    }
}

有关详细说明和解释,请参阅:Radio buttons