Existe-t-il un moyen de mettre à jour plusieurs TextView avec ArrayAdapter?

J'ai une vue de liste qui a plusieurs visionnages de texte comme ceci:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/name" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16dip" android:textColor="#000000" android:paddingLeft="10dip" android:textStyle="bold"/> <TextView android:id="@+id/address" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textSize="16dip" android:textColor="#000000" android:paddingTop="15dip" android:paddingBottom="15dip" android:paddingLeft="10dip" android:textStyle="bold"/> </RelativeLayout> 

J'ai une liste de POJO qui a un name et une address et je veux que chaque élément de la vue de liste soit rempli avec ces valeurs.

  • Ajout d'un fichier .so dans Android Studio
  • Après la rotation de l'écran, la langue de ma demande sera modifiée
  • Comment obtenir des mails de messagerie gmail de manière programmée dans Android
  • ExpandableListView et la NavigationDrawer
  • Gers désérialisation de List <String> dans realmList <RealmString>
  • Comment créer Insecure RFCOMM Socket dans Android?
  • Mon POJO est comme ceci:

     public class Person { private String name; private String address; //getter setter public String toString() {return name;} } 

    Question

    Lorsque j'ai configuré l'adaptateur de liste avec ma liste, comment puis-je définir le nom et l'adresse?

    Actuellement, je fais ce qui ne définit que le nom:

     setListAdapter(new ArrayAdapter<Person>(MyActivity.this, R.layout.list_text, R.id.name, personList)); 

  • TestUI (Jenkins) à l'aide d'un expresso
  • Jouer à la vidéo locale dans la visualisation web
  • Transfert de données Bluetooth entre deux appareils Android
  • Meilleure pratique: comment puis-je sécuriser les requêtes Http (par exemple, la connexion) à partir d'une application mobile
  • Désassembler les fichiers XML dans des objets Java dans Android?
  • Prise en charge de Google Adt / gwt pour eclipse 4.4 (Luna)
  • 2 Solutions collect form web for “Existe-t-il un moyen de mettre à jour plusieurs TextView avec ArrayAdapter?”

    Vous devez créer un adapter personnalisé qui étend ArrayAdapter . Les choses que vous pouvez faire avec un ArrayAdapter sont limitées.

    Quelque chose comme ça:

     public class PersonAdapter extends ArrayAdapter<Person> { private final Context context; private final ArrayList<Person> data; private final int layoutResourceId; public PersonAdapter(Context context, int layoutResourceId, ArrayList<Person> data) { super(context, layoutResourceId, data); this.context = context; this.data = data; this.layoutResourceId = layoutResourceId; } @Override public View getView(int position, View convertView, ViewGroup parent) { View row = convertView; ViewHolder holder = null; if(row == null) { LayoutInflater inflater = ((Activity)context).getLayoutInflater(); row = inflater.inflate(layoutResourceId, parent, false); holder = new ViewHolder(); holder.textView1 = (TextView)row.findViewById(R.id.text1); holder.textView2 = (TextView)row.findViewById(R.id.text2); ... ... holder.textView3 = (TextView)row.findViewById(R.id.text3); row.setTag(holder); } else { holder = (ViewHolder)row.getTag(); } Person person = data.get(position); holder.textView1.setText(person.getName()); holder.textView2.setText(person.getAddress()); ... ... holder.textView3.setText(person.getEtc()); return row; } static class ViewHolder { TextView textView1; TextView textView2; ... ... TextView textView3; } } 

    textView1 , textView2textView-n sont toutes vos vues de texte. Réglez votre adaptateur comme suit:

     setListAdapter(new PersonAdapter(MyActivity.this, R.layout.list_text, personList)); 

    Remarque: Je suppose que votre personList est un objet Type de List . Si c'est un Array , laissez-moi savoir.

    Je vérifie le TwoLineArrayAdapter par ESV, il est formaté pour le nom et le titre, mais c'est presque exactement ce dont vous avez besoin.

    Modifier:

     class StringHolder { public String text; public int viewId; } 

    Pour un scénario de n strings, la solution est très similaire. Créez un ArrayAdapter personnalisé de type StringHolder[] ou List<StringHolder> selon que ce montant soit corrigé. Dans votre getView vous effectuez une boucle dans tous les objets StringHolder , appelez findViewById et mettez à jour le contenu du texte. Alternativement, vous pouvez simplement utiliser l'index dans la liste / liste et la mapper à une ID de vue si elles resteront cohérentes.

    Ce n'est évidemment qu'une façon de le faire, il y en a beaucoup plus et je laisserai la mise en œuvre effective comme un exercice pour le lecteur.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.