मूल्य द्वारा स्पिनर के चयनित आइटम को कैसे सेट करें, स्थिति से नहीं?


295

मेरे पास एक अपडेट दृश्य है, जहां मुझे एक स्पिनर के लिए डेटाबेस में संग्रहीत मूल्य को फिर से दिखाने की आवश्यकता है।

मैं कुछ इस तरह से मन में था, लेकिन Adapterकोई indexOfतरीका नहीं है, इसलिए मैं फंस गया हूँ।

void setSpinner(String value)
{
    int pos = getSpinnerField().getAdapter().indexOf(value);
    getSpinnerField().setSelection(pos);
}

जवाबों:


643

मान लीजिए कि आपका Spinnerनाम रखा गया है mSpinner, और इसमें इसकी पसंद में से एक है: "कुछ मूल्य"।

स्पिनर में "कुछ मूल्य" की स्थिति को खोजने और तुलना करने के लिए इसका उपयोग करें:

String compareValue = "some value";
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.select_state, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mSpinner.setAdapter(adapter);
if (compareValue != null) {
    int spinnerPosition = adapter.getPosition(compareValue);
    mSpinner.setSelection(spinnerPosition);
}

5
एक कस्टम एडेप्टर के साथ आपको getPosition () के लिए कोड लिखना होगा (ओवरराइड करना होगा)
Soham

3
कैसे के बारे में अगर आप एक स्ट्रिंग के खिलाफ जाँच नहीं कर रहे हैं, लेकिन एक वस्तु के अंदर एक तत्व है और यह सिर्फ isString () का उपयोग करने के लिए संभव नहीं है क्योंकि स्पिनर का मूल्य toString () के उत्पादन से भिन्न होता है।
अजीबोला

1
मुझे पता है कि यह बहुत पुराना है, लेकिन यह अब पाने के लिए एक अनियंत्रित कॉल फेंकता है (टी)
ब्रैड बास

इसी तरह की त्रुटियां
हुईं

हम्म ... अब क्या होगा यदि मैं, Parse.com से मान खींच रहा हूं, और उपयोगकर्ता को क्वेरी करना चाहता हूं ताकि डिफ़ॉल्ट स्पिनर का चयन उपयोगकर्ता के डेटाबेस मूल्य पर डिफ़ॉल्ट हो?
drearypanoramic

141

मूल्य के आधार पर स्पिनर सेट करने का एक सरल तरीका है

mySpinner.setSelection(getIndex(mySpinner, myValue));

 //private method of your class
 private int getIndex(Spinner spinner, String myString){
     for (int i=0;i<spinner.getCount();i++){
         if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(myString)){
             return i;
         }
     }

     return 0;
 } 

जटिल से जटिल कोड पहले से ही मौजूद हैं, यह सिर्फ अधिक स्पष्ट है।


7
break;जब सूचकांक प्रक्रिया को तेज करने के लिए पाया जाता है तो आप जोड़ना भूल गए ।
spacebiker

ब्रेक का उपयोग करने से बचने के लिए क्यों नहीं {} का उपयोग करें?
कैटालुक

@ कैटालुक में समाधान पर पहुंचने के कई तरीके हैं, आप चुनते हैं ... आपके लिए सबसे अच्छा काम क्या है
अखिल जैन

4
इसके बजाय 0, आपको वापस लौटना चाहिए -1यदि मूल्य नहीं मिला है - जैसा कि मेरे उत्तर में दिखाया गया है: stackoverflow.com/a/32377917/1617737 :-)
प्रतिबंध-जियोइंजीनियरिंग

2
@ प्रतिबंध-जियोइंजीनियरिंग मैंने 0बैकअप परिदृश्य के रूप में लिखा था । यदि आप सेट करते हैं -1, तो स्पिनर पर कौन सी वस्तु दिखाई देगी, मुझे लगता है कि स्पिनर एडॉप्टर का 0 वां तत्व है, -1 को जोड़ने से यह भी जाँचता है कि मान -1 है या नहीं, सेटिंग -1 का कारण अपवाद होगा।
अखिल जैन

34

मैं अपने स्पिनरों में सभी वस्तुओं का एक अलग ArrayList रखता हूं। इस तरह मैं ArrayList पर indexOf कर सकता हूं और फिर स्पिनर में चयन सेट करने के लिए उस मान का उपयोग कर सकता हूं।


कोई और रास्ता नहीं है, तुम्हें पता है?
पेंटियम

1
कुछ भी नहीं करने के लिए चयन कैसे सेट करें? (यदि आइटम सूची में नहीं है)
पेंटियम

5
HashMap.get ArrayList.indexOf की तुलना में बेहतर लुकअप स्पीड देगा
डांड्रे एलीसन

29

मेरिल के जवाब के आधार पर , मैं इस एकल लाइन समाधान के साथ आया था ... यह बहुत सुंदर नहीं है, लेकिन आप किसी को भी इसके Spinnerलिए ऐसा करने वाले फ़ंक्शन को शामिल करने की उपेक्षा के लिए कोड को बनाए रख सकते हैं ।

mySpinner.setSelection(((ArrayAdapter<String>)mySpinner.getAdapter()).getPosition(myString));

आपको इस बारे में एक चेतावनी मिलेगी कि कलाकारों को कैसे ArrayAdapter<String>अनियंत्रित किया जाता है ... वास्तव में, आप सिर्फ ArrayAdapterमेरिल के रूप में उपयोग कर सकते हैं , लेकिन यह सिर्फ एक के लिए एक चेतावनी का आदान-प्रदान करता है।


अनियंत्रित चेतावनी से छुटकारा पाने के लिए आपको उपयोग करना चाहिए <? > <स्ट्रिंग> के बजाय अपनी कास्ट में। वास्तव में किसी भी समय आप एक प्रकार के साथ कुछ भी डालते हैं, आपको उपयोग करना चाहिए <? >।
xbakesx

नहीं, अगर मैं एक को कास्ट करता हूँ? > यह मुझे चेतावनी के बजाय एक त्रुटि देता है: "ArrayAdapter प्रकार में विधि getPosition (?) <?> तर्क (स्ट्रिंग) के लिए लागू नहीं है।"
ArtOfWarfare

सही है, तो यह सोचेंगे कि यह एक ArrayAdapter है जिसमें कोई प्रकार नहीं है, इसलिए यह नहीं मानेंगे कि यह एक ArrayAdapter <String> है। तो चेतावनी से बचने के लिए आपको इसे ArrayAdapter को डालना होगा <? > फिर अपने अडैप्टर का परिणाम .get () को एक स्ट्रिंग पर रखें।
xbakesx

@ डडानी - मुझे लगता है कि आपने पहले कभी पायथन का उपयोग नहीं किया है, क्योंकि यह मूर्खतापूर्ण रूप से दोषी है।
आर्टऑफवर्फ

सहमत, मैंने पायथन @ArtOfWarfare के साथ नहीं खेला है, लेकिन यह कुछ कार्यों के लिए एक त्वरित तरीका है।
डैनियल डट

13

यदि आप स्ट्रिंग सरणी का उपयोग कर रहे हैं तो यह सबसे अच्छा तरीका है:

int selectionPosition= adapter.getPosition("YOUR_VALUE");
spinner.setSelection(selectionPosition);

10

आप यह भी उपयोग कर सकते हैं,

String[] baths = getResources().getStringArray(R.array.array_baths);
mSpnBaths.setSelection(Arrays.asList(baths).indexOf(value_here));

शानदार काम!
सदन हसन

8

यदि आपको किसी पुराने एडाप्टर पर एक इंडेक्सऑफ विधि की आवश्यकता है (और आप अंतर्निहित कार्यान्वयन को नहीं जानते हैं) तो आप इसका उपयोग कर सकते हैं:

private int indexOf(final Adapter adapter, Object value)
{
    for (int index = 0, count = adapter.getCount(); index < count; ++index)
    {
        if (adapter.getItem(index).equals(value))
        {
            return index;
        }
    }
    return -1;
}

7

मेरिल के जवाब के आधार पर यहां बताया गया है कि CursorAdapter के साथ क्या करना है

CursorAdapter myAdapter = (CursorAdapter) spinner_listino.getAdapter(); //cast
    for(int i = 0; i < myAdapter.getCount(); i++)
    {
        if (myAdapter.getItemId(i) == ordine.getListino() )
        {
            this.spinner_listino.setSelection(i);
            break;
        }
    }

6

मान का उपयोग करने के लिए निम्न पंक्ति का उपयोग करें:

mSpinner.setSelection(yourList.indexOf("value"));

3

मैं एक कस्टम एडेप्टर का उपयोग कर रहा हूं, उसके लिए यह कोड पर्याप्त है:

yourSpinner.setSelection(arrayAdapter.getPosition("Your Desired Text"));

तो, आपका कोड स्निपेट इस प्रकार होगा:

void setSpinner(String value)
    {
         yourSpinner.setSelection(arrayAdapter.getPosition(value));
    }

3

यह स्ट्रिंग द्वारा सूचकांक प्राप्त करने की मेरी सरल विधि है।

private int getIndexByString(Spinner spinner, String string) {
    int index = 0;

    for (int i = 0; i < spinner.getCount(); i++) {
        if (spinner.getItemAtPosition(i).toString().equalsIgnoreCase(string)) {
            index = i;
            break;
        }
    }
    return index;
}

3

आप इस तरह से उपयोग कर सकते हैं, बस अपने कोड को अधिक सरल और अधिक स्पष्ट बना सकते हैं।

ArrayAdapter<String> adapter = (ArrayAdapter<String>) spinnerCountry.getAdapter();
int position = adapter.getPosition(obj.getCountry());
spinnerCountry.setSelection(position);

आशा है ये मदद करेगा।


2

यहाँ मेरा समाधान है

List<Country> list = CountryBO.GetCountries(0);
CountriesAdapter dataAdapter = new CountriesAdapter(this,list);
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spnCountries.setAdapter(dataAdapter);
spnCountries.setSelection(dataAdapter.getItemIndexById(userProfile.GetCountryId()));

और नीचे itItemIndexById प्राप्त करें

public int getItemIndexById(String id) {
    for (Country item : this.items) {
        if(item.GetId().toString().equals(id.toString())){
            return this.items.indexOf(item);
        }
    }
    return 0;
}

उममीद है कि इससे मदद मिलेगी!


2

यदि आप एक का उपयोग कर रहे हैं SimpleCursorAdapter(जहां columnNamedb स्तंभ का नाम है जो आपने अपने को आबाद करने के लिए इस्तेमाल किया है spinner) तो यह कैसे करना है :

private int getIndex(Spinner spinner, String columnName, String searchString) {

    //Log.d(LOG_TAG, "getIndex(" + searchString + ")");

    if (searchString == null || spinner.getCount() == 0) {

        return -1; // Not found
    }
    else {

        Cursor cursor = (Cursor)spinner.getItemAtPosition(0);

        int initialCursorPos = cursor.getPosition(); //  Remember for later

        int index = -1; // Not found
        for (int i = 0; i < spinner.getCount(); i++) {

            cursor.moveToPosition(i);
            String itemText = cursor.getString(cursor.getColumnIndex(columnName));

            if (itemText.equals(searchString)) {
                index = i; // Found!
                break;
            }
        }

        cursor.moveToPosition(initialCursorPos); // Leave cursor as we found it.

        return index;
    }
}

यह भी ( अखिल के जवाब का शोधन ) यह एक ऐसा तरीका है यदि आप अपने स्पिनर को एक सरणी से भर रहे हैं:

private int getIndex(Spinner spinner, String searchString) {

    if (searchString == null || spinner.getCount() == 0) {

        return -1; // Not found

    }
    else {

        for (int i = 0; i < spinner.getCount(); i++) {
            if (spinner.getItemAtPosition(i).toString().equals(searchString)) {
                return i; // Found!
            }
        }

        return -1; // Not found
    }
};

1

यदि आप XML लेआउट में स्पिनर को XML सरणी सेट करते हैं तो आप ऐसा कर सकते हैं

final Spinner hr = v.findViewById(R.id.chr);
final String[] hrs = getResources().getStringArray(R.array.hours);
if(myvalue!=null){
   for (int x = 0;x< hrs.length;x++){
      if(myvalue.equals(hrs[x])){
         hr.setSelection(x);
      }
   }
}

0

वास्तव में AdapterArray पर एक सूचकांक खोज का उपयोग करके इसे प्राप्त करने का एक तरीका है और यह सब प्रतिबिंब के साथ किया जा सकता है। मैं एक कदम और आगे बढ़ गया क्योंकि मेरे पास 10 स्पिनर थे और वे अपने डेटाबेस से गतिशील रूप से सेट करना चाहते थे और डेटाबेस में केवल पाठ ही मूल्य नहीं है क्योंकि स्पिनर वास्तव में सप्ताह में सप्ताह बदलता है इसलिए मूल्य डेटाबेस से मेरा आईडी नंबर है।

 // Get the JSON object from db that was saved, 10 spinner values already selected by user
 JSONObject json = new JSONObject(string);
 JSONArray jsonArray = json.getJSONArray("answer");

 // get the current class that Spinner is called in 
 Class<? extends MyActivity> cls = this.getClass();

 // loop through all 10 spinners and set the values with reflection             
 for (int j=1; j< 11; j++) {
      JSONObject obj = jsonArray.getJSONObject(j-1);
      String movieid = obj.getString("id");

      // spinners variable names are s1,s2,s3...
      Field field = cls.getDeclaredField("s"+ j);

      // find the actual position of value in the list     
      int datapos = indexedExactSearch(Arrays.asList(Arrays.asList(this.data).toArray()), "value", movieid) ;
      // find the position in the array adapter
      int pos = this.adapter.getPosition(this.data[datapos]);

      // the position in the array adapter
      ((Spinner)field.get(this)).setSelection(pos);

}

यहां अनुक्रमित खोज आप लगभग किसी भी सूची पर उपयोग कर सकते हैं जब तक कि ऑब्जेक्ट के शीर्ष स्तर पर फ़ील्ड्स हैं।

    /**
 * Searches for exact match of the specified class field (key) value within the specified list.
 * This uses a sequential search through each object in the list until a match is found or end
 * of the list reached.  It may be necessary to convert a list of specific objects into generics,
 * ie: LinkedList&ltDevice&gt needs to be passed as a List&ltObject&gt or Object[&nbsp] by using 
 * Arrays.asList(device.toArray(&nbsp)).
 * 
 * @param list - list of objects to search through
 * @param key - the class field containing the value
 * @param value - the value to search for
 * @return index of the list object with an exact match (-1 if not found)
 */
public static <T> int indexedExactSearch(List<Object> list, String key, String value) {
    int low = 0;
    int high = list.size()-1;
    int index = low;
    String val = "";

    while (index <= high) {
        try {
            //Field[] c = list.get(index).getClass().getDeclaredFields();
            val = cast(list.get(index).getClass().getDeclaredField(key).get(list.get(index)) , "NONE");
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        if (val.equalsIgnoreCase(value))
            return index; // key found

        index = index + 1;
    }

    return -(low + 1);  // key not found return -1
}

कास्ट विधि जो सभी प्राइमेट के लिए बनाई जा सकती है यहां स्ट्रिंग और इंट के लिए एक है।

        /**
 *  Base String cast, return the value or default
 * @param object - generic Object
 * @param defaultValue - default value to give if Object is null
 * @return - returns type String
 */
public static String cast(Object object, String defaultValue) {
    return (object!=null) ? object.toString() : defaultValue;
}


    /**
 *  Base integer cast, return the value or default
 * @param object - generic Object
 * @param defaultValue - default value to give if Object is null
 * @return - returns type integer
 */
public static int cast(Object object, int defaultValue) { 
    return castImpl(object, defaultValue).intValue();
}

    /**
 *  Base cast, return either the value or the default
 * @param object - generic Object
 * @param defaultValue - default value to give if Object is null
 * @return - returns type Object
 */
public static Object castImpl(Object object, Object defaultValue) {
    return object!=null ? object : defaultValue;
}

0

एप्लिकेशन को अंतिम चयनित स्पिनर मूल्यों को याद रखने के लिए, आप नीचे दिए गए कोड का उपयोग कर सकते हैं:

  1. नीचे कोड स्पिनर मूल्य को पढ़ता है और तदनुसार स्पिनर की स्थिति निर्धारित करता है।

    public class MainActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    int spinnerPosition;
    
    Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
    ArrayAdapter<CharSequence> adapter1 = ArrayAdapter.createFromResource(
            this, R.array.ccy_array,
            android.R.layout.simple_spinner_dropdown_item);
    adapter1.setDropDownViewResource(android.R.layout.simple_list_item_activated_1);
    // Apply the adapter to the spinner
    spinner1.setAdapter(adapter1);
    // changes to remember last spinner position
    spinnerPosition = 0;
    String strpos1 = prfs.getString("SPINNER1_VALUE", "");
    if (strpos1 != null || !strpos1.equals(null) || !strpos1.equals("")) {
        strpos1 = prfs.getString("SPINNER1_VALUE", "");
        spinnerPosition = adapter1.getPosition(strpos1);
        spinner1.setSelection(spinnerPosition);
        spinnerPosition = 0;
    }
  2. और नीचे कोड डालें जहां आपको पता है कि नवीनतम स्पिनर मान मौजूद हैं, या आवश्यकतानुसार कहीं और। कोड का यह टुकड़ा मूल रूप से शेयरड्रेफरेंस में स्पिनर मूल्य लिखता है।

        Spinner spinner1 = (Spinner) findViewById(R.id.spinner1);
        String spinlong1 = spinner1.getSelectedItem().toString();
        SharedPreferences prfs = getSharedPreferences("WHATEVER",
                Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = prfs.edit();
        editor.putString("SPINNER1_VALUE", spinlong1);
        editor.commit();

0

मेरे पास एक ही मुद्दा था जब एक कर्सरर का उपयोग करके आबादी वाले स्पिनर में सही आइटम का चयन करने का प्रयास किया गया था। मैंने उस आइटम की आईडी को पुनः प्राप्त कर लिया जिसे मैं तालिका 1 से पहले चुनना चाहता था और फिर स्पिनर को आबाद करने के लिए CursorLoader का उपयोग किया। OnLoadFinished मैं स्पिनर के एडॉप्टर को पॉप करने वाले कर्सर के माध्यम से साइकिल चलाती हूं जब तक कि मुझे वह आइटम नहीं मिला जो उस आईडी से मेल खाता था जो मेरे पास पहले से थी। फिर कर्सर की पंक्ति संख्या को स्पिनर की चयनित स्थिति को सौंपा। जब आप स्पिनर परिणामों को सहेजने वाले फॉर्म में विवरणों को स्पिनर में चुनना चाहते हैं, तो उस मूल्य के आईडी में पास होने के लिए एक समान कार्य करना अच्छा होगा।

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {  
  adapter.swapCursor(cursor);

  cursor.moveToFirst();

 int row_count = 0;

 int spinner_row = 0;

  while (spinner_row < 0 || row_count < cursor.getCount()){ // loop until end of cursor or the 
                                                             // ID is found 

    int cursorItemID = bCursor.getInt(cursor.getColumnIndexOrThrow(someTable.COLUMN_ID));

    if (knownID==cursorItemID){
    spinner_row  = row_count;  //set the spinner row value to the same value as the cursor row 

    }
cursor.moveToNext();

row_count++;

  }

}

spinner.setSelection(spinner_row ); //set the selected item in the spinner

}

0

जैसा कि पिछले कुछ उत्तर बहुत सही हैं, मैं सिर्फ यह सुनिश्चित करना चाहता हूं कि आप में से कोई भी इस तरह की समस्या में न पड़े।

यदि आप मानों का ArrayListउपयोग करने के लिए सेट करते हैं String.format, तो आपको उसी स्ट्रिंग संरचना का उपयोग करके मूल्य की स्थिति प्राप्त करनी होगी String.format

एक उदाहरण:

ArrayList<String> myList = new ArrayList<>();
myList.add(String.format(Locale.getDefault() ,"%d", 30));
myList.add(String.format(Locale.getDefault(), "%d", 50));
myList.add(String.format(Locale.getDefault(), "%d", 70));
myList.add(String.format(Locale.getDefault(), "%d", 100));

आपको इस तरह आवश्यक मूल्य की स्थिति प्राप्त करनी चाहिए:

myList.setSelection(myAdapter.getPosition(String.format(Locale.getDefault(), "%d", 70)));

अन्यथा, आपको -1आइटम मिल जाएगा , नहीं मिला!

मैंने अरबी भाषा केLocale.getDefault() कारण उपयोग किया ।

मुझे उम्मीद है कि यह आपके लिए मददगार होगा।


0

यहाँ मेरा आशा पूर्ण समाधान है। मेरे पास enum है:

public enum HTTPMethod {GET, HEAD}

निम्न वर्ग में उपयोग किया जाता है

public class WebAddressRecord {
...
public HTTPMethod AccessMethod = HTTPMethod.HEAD;
...

HTTPMethod एनम-सदस्य द्वारा स्पिनर सेट करने के लिए कोड:

    Spinner mySpinner = (Spinner) findViewById(R.id.spinnerHttpmethod);
    ArrayAdapter<HTTPMethod> adapter = new ArrayAdapter<HTTPMethod>(this, android.R.layout.simple_spinner_item, HTTPMethod.values());
    mySpinner.setAdapter(adapter);
    int selectionPosition= adapter.getPosition(webAddressRecord.AccessMethod);
    mySpinner.setSelection(selectionPosition);

जहां R.id.spinnerHttpmethodएक लेआउट-फाइल में परिभाषित किया गया है, और android.R.layout.simple_spinner_itemएंड्रॉइड-स्टूडियो द्वारा वितरित किया गया है।


0
YourAdapter yourAdapter =
            new YourAdapter (getActivity(),
                    R.layout.list_view_item,arrData);

    yourAdapter .setDropDownViewResource(R.layout.list_view_item);
    mySpinner.setAdapter(yourAdapter );


    String strCompare = "Indonesia";

    for (int i = 0; i < arrData.length ; i++){
        if(arrData[i].getCode().equalsIgnoreCase(strCompare)){
                int spinnerPosition = yourAdapter.getPosition(arrData[i]);
                mySpinner.setSelection(spinnerPosition);
        }
    }

StackOverflow में आपका स्वागत है। उनमें केवल कोड वाले उत्तर हटाए जाने के लिए ध्वजांकित होते हैं क्योंकि वे "निम्न गुणवत्ता" हैं। कृपया प्रश्नों के उत्तर देने में सहायता अनुभाग पढ़ें फिर अपने उत्तर में कुछ टिप्पणी जोड़ने पर विचार करें।
ग्राहम

@ user2063903, कृपया अपने उत्तर में स्पष्टीकरण जोड़ें।
लूफी

0

बहुत सरल बस उपयोग करें getSelectedItem();

जैसे:

ArrayAdapter<CharSequence> type=ArrayAdapter.createFromResource(this,R.array.admin_typee,android.R.layout.simple_spinner_dropdown_item);
        type.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        mainType.setAdapter(type);

String group=mainType.getSelectedItem().toString();

उपरोक्त विधि एक स्ट्रिंग मान लौटाता है

उपरोक्त R.array.admin_typeमें मानों में एक स्ट्रिंग संसाधन फ़ाइल है

मूल्यों में बस एक .xml फ़ाइल बनाएँ


0

मान लें कि आपको संसाधन से स्ट्रिंग-सरणी से स्पिनर को भरने की जरूरत है, और आप चयनित मूल्य को सर्वर से रखना चाहते हैं। तो, यह स्पिनर में सर्वर से चयनित मूल्य को सेट करने का एक तरीका है।

pincodeSpinner.setSelection(resources.getStringArray(R.array.pincodes).indexOf(javaObject.pincode))

आशा है ये मदद करेगा! PS कोडिन में कोड है!


0

चूँकि मुझे कुछ चाहिए था, जो कि स्थानीयकरण के साथ भी काम करता है , मैं इन दो तरीकों के साथ आया:

    private int getArrayPositionForValue(final int arrayResId, final String value) {
        final Resources english = Utils.getLocalizedResources(this, new Locale("en"));
        final List<String> arrayValues = Arrays.asList(english.getStringArray(arrayResId));

        for (int position = 0; position < arrayValues.size(); position++) {
            if (arrayValues.get(position).equalsIgnoreCase(value)) {
                return position;
            }
        }
        Log.w(TAG, "getArrayPosition() --> return 0 (fallback); No index found for value = " + value);
        return 0;
    }

जैसा कि आप देख सकते हैं, मैं arrays.xml और मैं के खिलाफ तुलना कर रहा हूँ के बीच मामले की संवेदनशीलता की अतिरिक्त जटिलता पर ठोकर खाई है value। यदि आपके पास यह नहीं है, तो उपरोक्त विधि को कुछ इस तरह से सरल बनाया जा सकता है:

return arrayValues.indexOf(value);

स्थैतिक सहायक विधि

public static Resources getLocalizedResources(Context context, Locale desiredLocale) {
        Configuration conf = context.getResources().getConfiguration();
        conf = new Configuration(conf);
        conf.setLocale(desiredLocale);
        Context localizedContext = context.createConfigurationContext(conf);
        return localizedContext.getResources();
    }

-3

आपको अपने कस्टम एडाप्टर को REPEAT [स्थिति] जैसी स्थिति के साथ पास करना होगा। और यह ठीक से काम करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.