3

I'm trying to populate a ListView with an ArrayList. The ArrayList contains Usuarios Objects. Usuario has two fields (String nombre, String edad). This is my code:

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);

When I test my Android App, it looks like this:

enter image description here

The ListView doesn't show the Usuario fields (nombre, edad) it shows es.dga.sqlitetest.Usuario@43e4...

Can anyone help me? Thanks


Use a ProcessBuilder. It has an environment() method which returns a (mutable!!) Map<String, String> representing the environment of the process you wish to run. Modifying this map modifies the environment of the process you will run.

See the javadoc (link above): it has an example altering the environment before running.

4

4 に答える 4

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、ビューを拡張し、必要な詳細を正確に表示できるようにします。ここここにいくつかの良い情報があります。

于 2013-06-05T10:30:05.773 に答える