2013-09-03 9 views
10

Ho cercato molto ma la roba che ho trovato era un po 'confusa.Android ottiene tutti i paesi su spinner matrice

Ho bisogno di ottenere l'elenco dei paesi Android e impostare le impostazioni internazionali predefinite dell'utente.

Ad esempio: Sto registrando un account utente e ho bisogno di inserire il paese, in quello spinner mostrerà tutti i paesi, ma per impostazione predefinita verrà visualizzato il mio locale predefinito.

In questo momento ho:

private Spinner spCountry; 
private String array_spinner[]; 

...

spCountry = (Spinner) findViewById(R.id.spCountry); 

array_spinner = new String[1]; 
array_spinner[0] = "Portugal"; 

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, array_spinner); 
spCountry.setAdapter(adapter); 

Grazie a tutti per l'aiuto!

risposta

27

Come per me, iterò le Locales disponibili e aggiungo ciascuna voce in una lista di array. E ovviamente devo ignorare i duplicati e le stringhe vuote. Ecco il mio codice:

Locale[] locale = Locale.getAvailableLocales(); 
ArrayList<String> countries = new ArrayList<String>(); 
String country; 
for(Locale loc : locale){ 
    country = loc.getDisplayCountry(); 
    if(country.length() > 0 && !countries.contains(country)){ 
     countries.add(country); 
    } 
} 
Collections.sort(countries, String.CASE_INSENSITIVE_ORDER); 

Spinner citizenship = (Spinner)findViewById(R.id.input_citizenship); 
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, countries); 
citizenship.setAdapter(adapter); 
+5

Puoi anche usare un Set invece di un Elenco, quindi devi solo controllare le stringhe vuote perché un Set non può contenere elementi duplicati. –

6

È possibile utilizzare

private static final String DEFAULT_LOCAL = "Portugal"; 

Quindi utilizzare per impostare la selezione di default come segue.

ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, array_spinner); 
spCountry.setAdapter(adapter); 
spCountry.setSelection(adapter.getPosition(DEFAULT_LOCAL)); 

USCITA:

enter image description here

UPDATE: Creare arrays.xml in res/values

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

    <string-array name="country_arrays"> 
     <item>Malaysia</item> 
     <item>United States</item> 
     <item>Indonesia</item> 
     <item>France</item> 
     <item>Italy</item> 
     <item>Singapore</item> 
     <item>New Zealand</item> 
     <item>India</item> 
     <item>Portugal</item> 
    </string-array> 

</resources> 

quindi utilizzare seguente nel activity a ottenere tutti i paesi.

array_spinner = getResources().getStringArray(R.array.country_arrays); 
+0

Ciao, grazie per la tua risposta, ma il mio problema principale è: come ottengo tutti i paesi da Android al mio filatore? – FilipeOS

+0

vedere la mia risposta aggiornata, se funziona per te quindi contrassegnarlo come risposta. –

+0

È possibile utilizzare le impostazioni internazionali per estrarre tutti i Paesi e visualizzarli sull'array giusto? Hardcoded it's male (xml) – FilipeOS

0

Un selezionatore di paese utile e personalizzabile per le vostre esigenze.

Gradle

repositories { 
    maven { url "https://jitpack.io" } 
} 

compile 'com.github.ekimual:country-picker-x:1.0.0' 

campione Uso:

/* Declare */ 
CountryPickerDialog countryPicker; 

/* Name of your Custom JSON list */ 
int resourceId = getResources().getIdentifier("country_avail", "raw", getApplicationContext().getPackageName()); 

countryPicker = new CountryPickerDialog(MainActivity.this, new CountryPickerCallbacks() { 
     @Override 
     public void onCountrySelected(Country country, int flagResId) { 
      /* Get Country Name: country.getCountryName(context); */ 
      /* Call countryPicker.dismiss(); to prevent memory leaks */ 
     } 

     /* Set to false if you want to disable Dial Code in the results and true if you want to show it 
     Set to zero if you don't have a custom JSON list of countries in your raw file otherwise use 
     resourceId for your customly available countries */ 
    }, false, 0); 

countryPicker.show(); 

Riferimento https://android-arsenal.com/details/1/4390

0

Perché non farlo in questo modo? Basta inserire i paesi in una lista, ordinarla e inserirla.

String[] locales = Locale.getISOCountries(); 
List<String> countries = new ArrayList<>(); 
countries.add("**Select Country**"); 

for (String countryCode : locales) { 

     Locale obj = new Locale("", countryCode); 

     countries.add(obj.getDisplayCountry()); 

} 
Collections.sort(countries); 
countrySpinner.setItems(countries); 
Problemi correlati