我正在尝试在ArrayAdapter
中显示蓝牙设备列表,并希望覆盖适配器的默认功能以显示对象toString()
。我知道有一些扩展getView(...)
方法的解决方案,但我真的觉得这太复杂了。我想要的是覆盖要显示的字符串的构建方式。对于蓝牙设备,这将使用getName()
而不是toString()
。
所以我创建了一个自定义数组适配器,如下所示,理想情况下会有类似getDisplayString(T value)
public class MyArrayAdapter extends ArrayAdapter<BluetoothDevice> {
...
@Override //I wish something like this existed
protected String getDisplayString(BluetoothDevice b) {
return b.getName();
}
...
}
答案 0 :(得分:7)
改变getView
的行为并不一定非常复杂。
mAdapter = new ArrayAdapter<MyType>(this, R.layout.listitem, new ArrayList<MyType>()) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
TextView view = (TextView) super.getView(position, convertView, parent);
// Replace text with my own
view.setText(getItem(position).getName());
return view;
}
};
这样做的缺点是将视图的文本设置为两次(一次在super.getView
中,一次在覆盖中),但这并不会花费太多。另一种方法是在convertView
不存在的情况下使用inflater创建视图。
答案 1 :(得分:3)
尝试这样的事情:(注意:我没试过。)
public class MyArrayAdapter extends ArrayAdapter<Object> {
public MyArrayAdapter(Context c, List<Object> data){
super(c, 0, data);
mData = data;
}
@Override
public Object getItem(int position){
return ((BluetoothDevice)mData.get(position)).getName();
}
}