2013-09-03 10 views
10

पर मिलता है मैंने बहुत कुछ खोजा है लेकिन मुझे मिली चीजें थोड़ा उलझन में थीं।एंड्रॉइड सभी देशों को सर स्पिनर

मुझे एंड्रॉइड देश सूची प्राप्त करने और उपयोगकर्ता लोकेल को डिफ़ॉल्ट सेट करने की आवश्यकता है।

उदाहरण के लिए: मैं एक उपयोगकर्ता खाता पंजीकृत कर रहा हूं और मुझे देश को सम्मिलित करने की आवश्यकता है, उस स्पिनर में सभी देशों को दिखाया जाएगा लेकिन डिफ़ॉल्ट रूप से मेरा डिफ़ॉल्ट लोकेल दिखाई देगा।

अभी मेरे पास है:

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

आप सभी की मदद के लिए धन्यवाद!

उत्तर

27

मेरे लिए, मैं उपलब्ध लोकेल को पुन: सक्रिय करता हूं और प्रत्येक आइटम को सरणी सूची में जोड़ता हूं। और निश्चित रूप से मुझे डुप्लिकेट और खाली तारों को अनदेखा करना होगा। यहां मेरा कोड है:

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

आप किसी सूची के सेट में भी सेट का उपयोग कर सकते हैं, इसलिए आपको केवल खाली स्ट्रिंग्स पर जांच करनी होगी क्योंकि सेट में डुप्लिकेट आइटम नहीं हो सकते हैं। –

6

आप

private static final String DEFAULT_LOCAL = "Portugal"; 

तो उपयोग कर सकते हैं इसका इस्तेमाल इस प्रकार डिफ़ॉल्ट चयन निर्धारित करें।

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

उत्पादन:

enter image description here

अद्यतन: बनाएं arrays.xmlres/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> 

फिर अपने activity करने के लिए निम्नलिखित का उपयोग करें सभी देशों को प्राप्त करें।

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

हाय, आपके उत्तर के लिए धन्यवाद लेकिन मेरा मुख्य मुद्दा यह है: मैं अपने स्पिनर को एंड्रॉइड से सभी देशों को कैसे प्राप्त करता हूं? – FilipeOS

+0

मेरा अद्यतन उत्तर देखें, अगर यह आपके लिए काम करता है तो इसे उत्तर के रूप में चिह्नित करें। –

+0

सभी देशों को खींचने और सरणी पर प्रदर्शित करने के लिए लोकेल का उपयोग करना संभव है? हार्डकोडेड यह खराब है (xml) – FilipeOS

0

आपकी ज़रूरतों के लिए एक सहायक और अनुकूलन देश पिकर।

Gradle

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

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

नमूना उपयोग:

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

संदर्भ https://android-arsenal.com/details/1/4390

0

क्यों इस तरह यह नहीं कर रही? बस देशों को एक सूची में प्राप्त करना, इसे सॉर्ट करना और इसे डालना।

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); 
संबंधित मुद्दे