Comment définir les deux lignes d'un ListView en utilisant simple_list_item_2?

Donc, ce qui suit créera un ListView où les lignes ont leur "viewview" primaire "rempli par le tableau de valeurs".

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_2, android.R.id.text1, values); 

La modification du troisième paramètre sur android.R.id.text2 définit la visualisation "secondaire". Existe-t-il un moyen simple de définir les deux?

  • Toast personnalisé dans Android: un exemple simple
  • Comment réparer ceci: sur logcat - >> erreur de chargement /system/media/audio/ui/Effect_Tick.ogg ??
  • Mute audio sur ExoPlayer
  • Fond d'écran Android avec image dégradée et carrelée
  • Threading dans Android
  • Filtrer les messages de journal par PID ou le package d'application dans Android
  • Choisissez un répertoire / fichier en utilisant Intent.ACTION_CREATE_DOCUMENT (Storage Access Framework)
  • Comment puis-je cacher le clavier Android à l'aide de JavaScript?
  • Comment puis-je obtenir la date et l'heure du fournisseur du réseau?
  • Carte Google montrant du texte de copyright supplémentaire sur certains appareils
  • Android Apk décompilation semble facile
  • Coins intérieurs arrondis avec cadre intérieur transparent
  • 4 Solutions collect form web for “Comment définir les deux lignes d'un ListView en utilisant simple_list_item_2?”

    AFAIK simple_list_item_2 contient un TwoLineListItem contenant deux TextViews. ArrayAdapter ne fonctionnera pas ici, vous devrez créer un adaptateur personnalisé ou utiliser celui qui le prend en charge comme SimpleCursorAdapter.

     ListAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, mCursor, // Pass in the cursor to bind to. new String[] {People.NAME, People.COMPANY}, // Array of cursor columns to bind to. new int[] {android.R.id.text1, android.R.id.text2}); // Parallel array of which template objects to bind to those columns. // Bind to our new adapter. setListAdapter(adapter); 

    Ou si vous ne voulez pas SimpleCursorAdapter, vous devrez créer Custom ArrayAdapter ou BaseAdapter

    Créez un ArrayAdapter personnalisé, appliquez le tableau de l'objet (Avoir deux éléments) à l'adaptateur personnalisé et alimentez-le à getListView.setAdapter.

    Remplacez la méthode getView d'ArrayAdapter pour appliquer vos chaînes de noms à TextViews dans votre vue de ligne de liste personnalisée.

    L'extrait suivant vous aidera.

    SampleActivity.java

     package org.sample; import java.util.ArrayList; import android.app.ListActivity; import android.content.Context; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import android.widget.TwoLineListItem; public class SampleActivity extends ListActivity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); Person person; ArrayList<Person> persons = new ArrayList<Person>(); person = new Person(); person.setName("Vipul"); person.setAge(20); persons.add(person); person = new Person(); person.setName("Anil"); person.setAge(22); persons.add(person); setListAdapter(new MyAdapter(this, persons)); } } 

    Person.java

     class Person { String name; int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 

    MyAdapter.java

     class MyAdapter extends BaseAdapter { private Context context; private ArrayList<Person> persons; public MyAdapter(Context context, ArrayList<Person> persons) { this.context = context; this.persons = persons; } @Override public int getCount() { return persons.size(); } @Override public Object getItem(int position) { return persons.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { TwoLineListItem twoLineListItem; if (convertView == null) { LayoutInflater inflater = (LayoutInflater) context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); twoLineListItem = (TwoLineListItem) inflater.inflate( android.R.layout.simple_list_item_2, null); } else { twoLineListItem = (TwoLineListItem) convertView; } TextView text1 = twoLineListItem.getText1(); TextView text2 = twoLineListItem.getText2(); text1.setText(persons.get(position).getName()); text2.setText("" + persons.get(position).getAge()); return twoLineListItem; } } 

    Cette question se classe avec Google mais je considère que la réponse donnée est trop compliquée. Comme indiqué dans d' autres réponses, la fonctionnalité souhaitée peut être réalisée en utilisant ArrayAdapter avec un truc très simple.

    Vous pouvez remplacer la méthode getView du ArrayAdapter:

     ArrayAdapter adapter = new ArrayAdapter(context, android.R.layout.simple_list_item_2, android.R.id.text1, list) { @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(persons.get(position).getName()); text2.setText(persons.get(position).getAge()); return view; } }; 

    Si vous ne vous êtes pas rendu compte: l'astuce consiste à fournir un paramètre android.R.id.text1 comme (principalement inutile), sinon l'appel à super entraînera une exception.

    En outre, cette solution n'utilise pas TwoLineListItem , qui a été obsolète dans l'API 17.

    J'espère que cela vous aidera

     ArrayAdapter<CustomObject> adapter = new ArrayAdapter<CustomObject> (_context, android.R.layout.simple_list_item_2, android.R.id.text1, listCustomObject) { @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(listCustomObject.get(position).getText1()); text2.setText( listCustomObject.get(position).getText2() ); return view; } }; 

    Peut essayer aussi …

     adapter = new ArrayAdapter(this,android.R.layout.simple_list_item_2,values){ @Override public View getView(int position, View convertView, ViewGroup parent){ TwoLineListItem row = (TwoLineListItem)super.getView(position, convertView, parent); row.getText1().setText(values.get***()); row.getText2().setText(values.get****()); return row; } }; setAdapter(adapter); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.