我正在尝试使用ArrayList填充ListView。 ArrayList包含Usuarios对象。 Usuario有两个字段(String nombre,String edad)。 这是我的代码:
ListView listview = (ListView) findViewById(R.id.ListView1);
ArrayList<Usuario> listaUsuarios = (ArrayList<Usuario>) dao.showAll();
ArrayAdapter<Usuario> adapter = new ArrayAdapter<Usuario>(this, android.R.layout.simple_list_item_1, listaUsuarios);
listview.setAdapter(adapter);
当我测试我的Android应用时,它看起来像这样:
ListView没有显示Usuario字段(nombre,edad),它显示了es.dga.sqlitetest.Usuario@43e4 ...
任何人都可以帮助我吗?感谢
答案 0 :(得分:4)
您应该为toString()
提供Usuario
方法。类似的东西:
@Override
public String toString() {
return this.label;
}
答案 1 :(得分:2)
您在屏幕截图中看到的是列表中对象的内存地址。 ArrayAdapter的默认行为是在数组中的每个对象上调用toString()
方法。如果您不覆盖toString()
方法,则会得到此结果的默认值。
覆盖toString()
对象中的Usuario
方法:
class Usuario {
// whatever you already had in place
// the name to display in the list
private String name = "some default value";
public String toString(){
return this.name;
}
}
创建具有Usuario
个对象集合的自定义适配器,以便您可以对视图进行充气并准确显示所需的详细信息。一些好的信息here和here。
答案 2 :(得分:1)
您似乎正在调用toString()
对象上的内置 Usuario
函数。
您需要覆盖它以实现自己的内容,您可以从中检索对象的各个字段(可能使用mObject.getNombre()
和mObject.getEdad()
或this.label
之类的内容。
答案 3 :(得分:0)
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)