2013-05-23 3 views
0

Je travaille dans un projet dans lequel je dois montrer à listview locales disponibles du système avec le format suivant:Redéfinition toString() pour Android LisView donne résultat inattendu

Je l'ai déjà fait dans onCreate :

@Override 
protected void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    setContentView(getContentView()); 

    String[] locales = getAssets().getLocales(); // all system locale 
    Arrays.sort(locales); // sort in lexicographic order 

    final int origSize = locales.length; 
    // Loc is a class that I've expalined later in this question 
    Loc[] preprocess = new Loc[origSize]; 
    int finalSize = 0; 
    for (int i = 0; i < origSize; i++) { 
     String s = locales[i]; 
     int len = s.length(); // i.e. en_US 
     if (len == 5) { 
      String language = s.substring(0, 2); // i.e. en 
      String country = s.substring(3, 5); // i.e. US 
      Locale l = new Locale(language, country); 
      // There are some other logics. I excluded those for simplicity 
      // and to focus the main problem 
      preprocess[finalSize++] = new Loc(
         toTitleCase(l.getDisplayName(l)), l); 
     } 
    } 

    mLocales = new Loc[finalSize + 1]; 
    // put into another array keeping it's first index empty 
    for (int i = 0; i < finalSize; i++) { 
     mLocales[i + 1] = preprocess[i]; 
    } 
    // put the system default to show it at the first index 
    mLocales[0] = new Loc("Use System Default", Resources 
      .getSystem().getConfiguration().locale); 

    // pass the array to Listview 
    int layoutId = R.layout.locale_picker_item; 
    int fieldId = R.id.locale; 
    ArrayAdapter<Loc> adapter = new ArrayAdapter<Loc>(this, layoutId, 
      fieldId, mLocales); 

    getListView().setAdapter(adapter); 
} 

Et la Loc classe est:

public static class Loc { 
     String label; 
     Locale locale; 

     public Loc(String label, Locale locale) { 
      this.label = label; 
      this.locale = locale; 
     } 

     @Override 
     public String toString() { 
        // for the first index, it should show system default 
      if (this.label.equals("Use System Default") 
       return (this.label + " (" + this.locale.getDisplayName() + ", " 
         + this.locale.getCountry() + ")"); 
      return this.locale.getDisplayName(this.locale); 
     } 

    } 

Ex pected Comportement:

________________________________ 
Use System Default (English, US) 
________________________________ 
বাংলা (বাংলাদেশ) 
________________________________ 
বাংলা (ভারত) 
________________________________ 
English (United States) 
    .... 
    .... 
    .... 

Mais dans mon cas,

________________________________ 
English (United States) 
________________________________ 
বাংলা (বাংলাদেশ) 
________________________________ 
বাংলা (ভারত) 
________________________________ 
English (United States) 
    .... 
    .... 
    .... 

Donc ma question est, pourquoi le texte que je veux montrer dans le listview dans le premier indice, non affiché? Je suis débutant dans StackOverFlow et peut avoir un anglais médiocre. Excusez-vous pour cela. Merci d'avance.

Répondre

0

Il y a une faute de frappe dans la chaîne que vous comparez:

mLocales[0] = new Loc("Use System Default" ...

et

if (this.label.equals("Use Sytem Default") ...

+0

Bonjour @laalto Merci pour votre réponse. En fait, c'est mon erreur de frappe sur la question. Mais en vrai programme, j'ai utilisé 'getString (R.string.use_system_default)' dans les deux endroits, ce qui signifie que les deux fautes de frappe sont identiques. Mais le problème reste le même :( –

0
problème dans

L'orthographe du système. votre archivez Sytem

faire

this.label.equals("Use System Default") 

au lieu de

this.label.equals("Use Sytem Default") 
+0

Bonjour @StinePike Merci pour votre réponse.En fait, c'est mon erreur de frappe sur la question.Mais en vrai programme, j'ai utilisé 'getString (R.string.use_system_default)' à la fois ce qui signifie le les deux fautes de frappe sont les mêmes mais le problème reste le même :( –

+0

pouvez-vous déboguer et vérifier la valeur de label dans la méthode toString? – stinepike

+0

Après le débogage, il montre le même résultat dans Logcat :( –