在ArrayAdapter中显示自定义对象 - 简单方法?

时间:2013-07-23 19:09:00

标签: android android-arrayadapter

我正在尝试在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();
    }
    ...
}

2 个答案:

答案 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();
  }

}