我想显示配对的蓝牙设备列表,让用户选择一个。我正在尝试使用单选按钮创建一个两行列表视图(一行用于友好设备名称,另一行用于MAC地址)。
为此,我已将simple_list_item_2_single_choice.xml复制到我的项目中,并使用以下代码创建列表视图:
listView = new ListView(activity);
listView.setItemsCanFocus(false);
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
ArrayAdapter<BluetoothDevice> listViewAdapter = new ArrayAdapter<BluetoothDevice>(activity,
R.layout.simple_list_item_2_single_choice, android.R.id.text1) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
TextView text2 = (TextView) view.findViewById(android.R.id.text2);
text1.setText(getItem(position).getName());
text2.setText(getItem(position).getAddress());
return view;
}
};
BluetoothAdapter btAdapter = BluetoothAdapter.getDefaultAdapter();
Set<BluetoothDevice> devices = btAdapter.getBondedDevices();
// addAll() is not supported on APIs below 11
for (BluetoothDevice device : devices)
listViewAdapter.add(device);
listView.setAdapter(listViewAdapter);
这会按照我想要的方式显示列表,但我无法选择任何项目(点击项目时单选按钮保持为空)。是什么给了什么?
答案 0 :(得分:0)
不确定这在AOSP中是如何工作的(他们可能会使用非标准逻辑进行布局),但是使用标准列表视图时,关键是 View的根项必须实现Checkable接口
所以,基于this answer,我做了以下事情:
通过这些更改,它可以按预期工作。我可以通过点击它们来检查项目,这些项目的行为就像一组单选按钮。
答案 1 :(得分:0)
我不确定您需要知道什么,但可以使用以下方式设置单选按钮:
radioButton.setChecked(true);
如果您需要在单击视图时设置radiobutton,我认为您可以在getView中执行类似的操作(其中“radio”是您在布局中设置的radioId):
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
TextView text1 = (TextView) view.findViewById(android.R.id.text1);
TextView text2 = (TextView) view.findViewById(android.R.id.text2);
RadioButton rbutton = (RadioButton) view.findViewById(R.id.radio);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
rbutton.setChecked(true);
}
});
text1.setText(getItem(position).getName());
text2.setText(getItem(position).getAddress());
return view;
}
如果有效,请告诉我。