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_2
où name
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
Vous devez vous connecter pour publier un commentaire.
Vous pouvez remplacer le
getView
méthode de laArrayAdapter
:ArrayAdapter
doc (developer.android.com/reference/android/widget/...). Si je vous comprends bien, je dois créer mon propre classe qui permettra de prolonger laArrayAdapter<Customer>
. SongetView
sera le remplacement que vous suggérez, à droite?Vous avez raison!
Merci, Patrick, pour l'astuce. S'il vous plaît, jetez un oeil à la mise à jour de question.
Voir ma réponse mis à jour.
Cela fonctionne sans problème. Merci beaucoup.
OriginalL'auteur Patrick
Découvrez cette tutoriel sur la façon de créer une listView. Étant un débutant, il commence à vous de le nouveau stade de projet, je pense que ça pourrait vous aider. Quant à ce que vous devez utiliser à la place de votre
toString()
méthode, il suffit de créer dans votreCustomer
classe des getters pour récupérer les données. Quelque chose comme ceci:Et à utiliser dans votre code comme ceci:
OriginalL'auteur Cosmin Ionascu