Comment construire et afficher les infos dans simple_list_item_2?

- Je obtenir la liste des informations sur le client à partir de mon (test) de la base de données, et je veux l'afficher. Le client est représenté par la Customer classe avec name, info, et note membres. Son toString méthode ne retourne que le name. J'ai créé la DemoDatabaseMainActivity qui utilise le simple_list_item_1 la mise en page uniquement, donc en affichant uniquement les name d'un client -- comme ceci:

public class DemoDatabaseMainActivity extends ListActivity {

    private CustomerDataSource datasource;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        datasource = new CustomerDataSource(this);
        datasource.open();

        List<Customer> values = datasource.getAllCustomers();

        ArrayAdapter<Customer> adapter = new ArrayAdapter<Customer>(this,
                                   android.R.layout.simple_list_item_1, values);
        setListAdapter(adapter);
    }
...
}

Il fonctionne très bien; cependant, j'aimerais apprendre à l'étape suivante...

Je voudrais modifier le code pour que je puisse utiliser le android.R.layout.simple_list_item_2name serait à la première ligne et de la info + note à la deuxième ligne? Ce qui devrait être mis en œuvre au lieu de la Customer.toString(), et quel adaptateur ou quoi que dois-je utiliser?

Mise à jour basé sur Patric commentaire https://stackoverflow.com/a/16062742/1346705 - à l'égard de qui, j'espère, pour la solution modifiée comme suit:

public class DemoDatabaseMainActivity extends ListActivity {

    private CustomerDataSource datasource;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        datasource = new CustomerDataSource(this);
        datasource.open();

        List<Customer> values = datasource.getAllCustomers();

        TwolineAdapter adapter = new TwolineAdapter(this, values);  //here the difference
        setListAdapter(adapter);
    }
...
}

Donc, j'ai ajouté mon TwolineAdapter classe de cette façon:

public class TwolineAdapter extends ArrayAdapter<Customer> {

    private List<Customer> objects;

    public TwolineAdapter(Context context, List<Customer> objects) {
        super(context, android.R.layout.simple_list_item_2, objects);
        this.objects = objects;
    }

    @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(objects.get(position).getName());
        text2.setText(objects.get(position).getInfo() 
                      + " (" + objects.get(position).getNote() + ")");
        return view;
    }
}

Mais il ne fonctionne pas (apparemment en raison de certaines de mes erreurs). Avis de la simple_list_item_2 dans le super le code du constructeur d'appel. Lors de l'exécution, le code affiche le journal des erreurs de message comme:

E/ArrayAdapter(27961): You must supply a resource ID for a TextView

Je voudrais vous demander où est le problème. En essayant de trouver la raison, j'ai modifié le TwolineAdapter à travailler de la même façon que l'original à l' simple_list_item_1

public class TwolineAdapter extends ArrayAdapter<Customer> {

    private List<Customer> objects;

    public TwolineAdapter(Context context, List<Customer> objects) {
        super(context, android.R.layout.simple_list_item_1, objects);
        this.objects = objects;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView view  = (TextView)super.getView(position, convertView, parent);
        view.setText(objects.get(position).getInfo());  //displaying a different info
        return view;
    }
}

Pour être sûr de le remplacé getView fonctionne, j'affiche une autre partie des informations sur le client. Et il a bien fonctionné. En d'autres termes, au lieu de le général toString méthode, le résultat de mes spécifique getInfo était affiché.

De toute façon, j'ai besoin d'utiliser la simple_list_item_2. De quel côté dois-je faire? (Ma conclusion est que je suis en train de faire quelque chose de mal dans le constructeur. Suis-je le droit? Où est le problème?)

OriginalL'auteur pepr | 2013-04-17