2013-09-03 36 views
10

tüm ülkeler olsun çok aradık ama bulduğum şeyler biraz karıştı.Android dizi spinner

Android ülke listesini almalı ve varsayılan kullanıcı yerel ayarını ayarlamalıyım.

Örneğin: Bir kullanıcı hesabı kaydediyorum ve ülkeyi eklemem gerekiyor, bu çevirici tüm ülkeleri gösterecek, ancak varsayılan olarak varsayılan konumumu gösterecektir.

Şu anda var:

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); 

yardım için teşekkür ederiz!

cevap

27

i mevcut Yerel yineleme ve bir ArrayList içine öğenin her ekleyin. Ve elbette kopyaları ve boş dizeleri görmezden gelmeliyim. İşte benim kodum:

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

Ayrıca, bir Listenin yerine bir Küme de kullanabilirsiniz, böylece bir Set, yinelenen öğeler içeremez, çünkü sadece boş dizeleri kontrol etmeniz gerekir. –

6

aşağıdaki gibi varsayılan seçimi ayarlamak için kullanabilir Sonra

private static final String DEFAULT_LOCAL = "Portugal"; 

kullanabilirsiniz.

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

ÇIKIŞ:

enter image description here

GÜNCELLEME: arrays.xml Sonra

<?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> 

res/values daki activity için aşağıdaki kullanın oluşturun tüm ülkeleri al.

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

Merhaba, cevabınız için teşekkürler, ancak asıl meselem: Android'i tüm dünyadan çeviriciye nasıl alıyorum? – FilipeOS

+0

güncellenmiş cevabımı görürsünüz, eğer sizin için çalışırsa cevap olarak işaretleyin. –

+0

Tüm ülkeleri çekmek ve dizide doğru görüntülemek için yerel ayarı kullanmak mümkün müdür? Sabit kodlanmış (xml) – FilipeOS

0

İhtiyaçlarınız için yararlı ve özelleştirilebilir Ülke Seçici.

Gradle

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

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

Örnek Kullanım:

/* 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(); 

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

0

Neden böyle yapmıyor? Sadece ülkeleri bir listeye almak, sıralamak ve eklemek.

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);