在我的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);
}
}
在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;
}
}
有关详细的演示和解释,请参见:单选按钮