我使用自定义适配器创建了一个自定义 ListView,每行都带有 radioButton。我想在检查其父 View (列表项)时以编程方式检查单选按钮,然后取消选中其他 ListView 项目中的其他 RadioButtons。谁能给我解决方案?
更新
这是我的 getView()
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout v = null;
final Item i = items.get(position);
EntryItem ei = (EntryItem) i;
v = (LinearLayout) vi.inflate(R.layout.list_item_entry, null);
final TextView title = (TextView) v
.findViewById(R.id.list_item_entry_title);
final TextView subtitle = (TextView) v
.findViewById(R.id.list_item_entry_summary);
RadioButton radioButton = new RadioButton(context);
radioButton.setFocusable(false);
radioButton.setFocusableInTouchMode(false);
v.addView(radioButton);
if (title != null)
title.setText(ei.title);
if (subtitle != null)
subtitle.setText(ei.subtitle);
convertView = v;
return convertView;
}
最佳答案
如果要选择单个项目,可以使用一个int变量,用-1初始化;
int index =-1;
在getView方法中添加一行:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LinearLayout v = null;
final Item i = items.get(position);
EntryItem ei = (EntryItem) i;
v = (LinearLayout) vi.inflate(R.layout.list_item_entry, null);
final TextView title = (TextView) v
.findViewById(R.id.list_item_entry_title);
final TextView subtitle = (TextView) v
.findViewById(R.id.list_item_entry_summary);
RadioButton radioButton = new RadioButton(context);
radioButton.setFocusable(false);
radioButton.setFocusableInTouchMode(false);
radioButton.setChecked(index==position);
radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
}
});
v.addView(radioButton);
}
if (title != null)
title.setText(ei.title);
if (subtitle != null)
subtitle.setText(ei.subtitle);
}
convertView = v;
return convertView;
}
并在监听器的 OnItemClick 方法中,执行:
index=position;
adapter.notifyDataSetInvalidated();
关于android - 在 Android 的 ListView 中操作 RadioButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11664077/