1

Hé, j'ai actuellement des problèmes avec une petite application Android que je suis en train de créer. Ce que je tente de construire est:Utilisation de ressources de chaînes multiples pour différents textviews

  • Une interface de liste avec
    • Chaque ligne ayant deux TextViews (un titre et une légende).
    • Avoir les valeurs de ceux-ci à tirer de deux ressources distinctes de tableau de chaînes.

L'interface a les vues de texte suivant dans rowLayout.xml,

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:orientation="vertical"> 

<TextView android:text="@+id/rowTitle" 
      android:layout_height="wrap_content" 
      android:id="@+id/title" 
      android:textSize="25px" 
      android:layout_width="match_parent"> 
</TextView> 

<TextView android:text="@+id/rowCaption" 
      android:layout_height="wrap_content" 
      android:id="@+id/caption" 
      android:textSize="25px" 
      android:layout_width="match_parent"> 
</TextView> 

et les ressources de chaîne sont,

<string-array name="menuEntryTitles"> 
    <item>Start</item> 
    <item>Stop</item> 
</string-array> 

<string-array name="menuEntryCaptions"> 
    <item>Starts the update listener service.</item> 
    <item>Stops the update listener service.</item> 
</string-array> 

Il devrait y avoir deux lignes intitulé Démarrer et Stop et chacun a ses légendes pertinentes . Je l'ai essayé en utilisant un ArrayAdapter à mettre en œuvre,

ArrayAdapter listAdapter = ArrayAdapter.createFromResource(this, 
      new int[] {R.array.menuEntryTitles, R.array.menuEntryCaptions}, 
      new int[] {R.id.rowTitle, R.id.rowCaption}); 

mais je reçois des erreurs en raison de createFromResource nécessitant int arguments quand je ne peux fournir int[].

J'espère que quelqu'un ici peut me diriger dans la bonne direction.

Vive

Répondre

1

Une solution est de créer votre propre adaptateur depuis ArrayAdapter utilise un seul tableau, et non deux.

Vous pouvez créer l'adaptateur en tant que classe privée dans ListActivity. Essayez quelque chose comme ceci (avertissement: le code non testé):

public class MyListActivity extends ListActivity { 
    protected void onCreate(){ 

     .... 

     // Get arrays from resources 
     Resources r = getResources();  
     String [] arr1 = r.getStringArray("menuEntryTitles"); 
     String [] arr1 = r.getStringArray("menuEntryCaptions"); 

     // Create your adapter 
     MyAdapter adapter = new MyAdapter(arr1, arr2); 

     setListAdapter(adapter); 
    } 

    private class MyAdapter extends BaseAdapter { 
     private LayoutInflater inflater; 

     String [] arr1; 
     String [] arr2; 

     public MyAdapter(String[] arr1, String[] arr2){ 
      inflater = (LayoutInflater)MyListActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

      this.arr1 = arr1; 
      this.arr2 = arr2; 
     } 

     @Override 
     public int getCount() { 
      return arr1.length; 
     } 

     @Override 
     public Object getItem(int position) { 
      return null; 
     } 

     @Override 
     public long getItemId(int position) { 
      return 0; 
     } 

     // Used to keep references to your views, optimizes scrolling in list 
     private static class ViewHolder { 
      TextView tv1; 
      TextView tv2; 
     } 


     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 

      ViewHolder holder; 
      if (convertView == null){ 
       convertView = inflater.inflate(R.layout.row_layout, null); 

       // Creates a ViewHolder and store references to the two children views 
       // we want to bind data to. 
       holder = new ViewHolder(); 
       holder.tv1 = (TextView) convertView.findViewById(R.id.rowTitle); 
       holder.tv2 = (TextView) convertView.findViewById(R.id.rowCaption); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder)convertView.getTag(); 
      } 

      holder.tv1.setText(arr1[position]); 
      holder.tv2.setText(arr2[position]); 

      return convertView; 
     } 
    } 
} 
+0

Pouvez-vous expliquer ce que le '' et ' tracks' sont utilisés pour? –

+0

Désolé, mais le code lié à Track était une erreur de copier-coller de mon côté. Je l'ai enlevé maintenant. Avez-vous testé le code? Cela a-t-il résolu votre problème? – jorgenfb

+0

A donné un aller et a obtenu une erreur de fermeture de force au démarrage. Un peu de débogage fonctionne plus tard et j'ai réussi à le faire fonctionner correctement :). Eclipse se plaignait de certains des dérogations qui devaient être supprimées pour fonctionner. Maintenant, étudie un peu le code pour comprendre ce qui est fait pour afficher ces éléments. Merci beaucoup. –

Questions connexes