স্পিনারের নির্বাচিত আইটেমটি পজিশনে নয়?


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 ()
সোহাম

3
আপনি যদি স্ট্রিংয়ের বিরুদ্ধে নয় তবে কোনও উপাদানের অভ্যন্তরে কোনও উপাদান পরীক্ষা করছেন এবং স্পষ্টারের মূল্য টসস্ট্রিং () এর আউটপুট থেকে পৃথক হওয়ার কারণে এটি কেবলমাত্র টসস্ট্রিং () ব্যবহার করা সম্ভব নয় তবে কীভাবে হয়।
আজিবোলা

1
আমি জানি এটি অনেক পুরানো, তবে এটি এখন পজিশনে (টি)
ব্র্যাড বাসে

অনুরূপ ত্রুটি আছড়ে ফেলে, কিন্তু এই পুরানো স্কুল পথ ব্যবহার করেছে: stackoverflow.com/questions/25632549/...
Manny265

হুম ... এখন যদি আমি পারস ডটকম থেকে মানটি টানছি, এবং ব্যবহারকারীকে জিজ্ঞাসা করতে চাই যাতে ডিফল্ট স্পিনার নির্বাচনটি ব্যবহারকারীর ডাটাবেসের মানের সাথে খেলাপি হয়?
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;প্রক্রিয়াটি দ্রুত করার জন্য সূচকটি পাওয়া গেলে আপনি যুক্ত করতে ভুলে গিয়েছিলেন ।
স্পেসবাইকার

বিরতি ব্যবহার এড়াতে কেন () ব্যবহার করবেন না?
ক্যাটলুক

@ গুগলুক সমাধানে পৌঁছানোর জন্য অনেকগুলি উপায় রয়েছে, আপনি বেছে নিয়েছেন ... আপনার পক্ষে কোনটা ভাল কাজ করে
আখিল জৈন

4
পরিবর্তে 0, -1মানটি পাওয়া না গেলে আপনার ফিরে আসা উচিত - যেমনটি আমার উত্তরে দেখানো হয়েছে: stackoverflow.com/a/32377917/1617737 :-)
নিষিদ্ধ-জিওইনজিনিংয়ের

2
@ ব্যান-জিওঞ্জিনিয়ারিং আমি 0ব্যাকআপের দৃশ্য হিসাবে লিখেছি । আপনি যদি সেট করেন -1, স্পিনারে কোন আইটেমটি দৃশ্যমান হবে, আমি মনে করি স্পিনার অ্যাডাপ্টারের 0 তম উপাদানটি, -1 যোগ করার সাথে মান -1 হয় কি না তা যাচাই করার অতিরিক্ত ওজন যুক্ত করে, কারণ সেটিং -1 ব্যতিক্রম ঘটবে।
অখিল জৈন

34

আমি আমার স্পিনারগুলিতে সমস্ত আইটেমের একটি পৃথক অ্যারেলিস্ট রাখি। এইভাবে আমি অ্যারেলিস্টে ইনডেক্সফ করতে পারি এবং তারপরে স্পিনারে নির্বাচন সেট করতে সেই মানটি ব্যবহার করতে পারি।


অন্য কোন উপায় নেই, আপনি জানেন?
পেন্টিয়াম

1
কিছুতেই নির্বাচন কীভাবে সেট করবেন? (আইটেমটি তালিকায় না থাকলে)
পেন্টিয়াম

5
অ্যারেলিস্ট.ইন্ডেক্সফের চেয়ে হ্যাশম্যাপ.জেট আরও ভাল গতি দেবে
ডাণ্ড্রে অ্যালিসন

29

মেরিলের উত্তরের ভিত্তিতে , আমি এই একক লাইন সমাধান নিয়ে এসেছি ... এটি খুব সুন্দর নয়, তবে Spinnerযে কেউ এর জন্য এই কাজটি অন্তর্ভুক্ত করার জন্য অবহেলা করার জন্য কোডটি বজায় রাখে তাকে দোষ দিতে পারেন ।

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

আপনি কীভাবে কাস্ট করা যায় তা পরীক্ষা না করা সম্পর্কে একটি সতর্কতা পাবেন ArrayAdapter<String>... সত্যিই, আপনি ArrayAdapterমেরিলের মতোই একটি ব্যবহার করতে পারেন তবে এটি অন্যটির জন্য কেবল একটি সতর্কবার্তা বিনিময় করে।


চেক না করা সতর্কতা থেকে মুক্তি পেতে আপনার <ব্যবহার করা উচিত? > <স্ট্রিং> এর পরিবর্তে আপনার কাস্টে। বাস্তবে যে কোনও সময় আপনি কোনও প্রকারের সাথে কিছু ফেলেন, আপনি <ব্যবহার করা উচিত? >।
xbakesx

না, আমি যদি একটি <কে কাস্ট করি? > এটি আমাকে একটি সতর্কবার্তার পরিবর্তে ত্রুটি দেয়: "অ্যারেএডাপ্টার <?> টাইপ পদ্ধতিটি পজ পজিশন (?) আর্গুমেন্ট (স্ট্রিং) এর জন্য প্রযোজ্য নয়।"
আর্টঅফ ওয়ারফেয়ার

ঠিক আছে, তারপরে এটি ভাববে যে এটি কোনও অ্যারেএডাপ্টার নয় এবং এটি কোনও অ্যারেএডাপ্টার <স্ট্রিং> ধরে নিবে না ass সুতরাং সতর্কতা এড়ানোর জন্য আপনার এটিকে অ্যারেএডাপ্টারে <কাস্ট করতে হবে? > তারপরে আপনার অ্যাডাপ্টার.জেটের ফলাফলটি একটি স্ট্রিংয়ে ফেলুন cast
xbakex

@ দাদানী - আমি এটি গ্রহণ করি যে আপনি পাইথন এর আগে কখনও ব্যবহার করেননি, কারণ এটি নির্বোধভাবে সংশ্লেষিত।
আর্টঅফ ওয়ারফেয়ার

সম্মত, আমি পাইথন @ আর্টঅফ ওয়ারফেয়ারের সাথে খেলিনি, তবে এটি নির্দিষ্ট কাজের জন্য একটি দ্রুত উপায়।
ড্যানিয়েল ডট

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

মেরিলের উত্তরের ভিত্তিতে এখানে একটি কার্সরএডাপ্টার দিয়ে কীভাবে করা যায় is

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

আশা করি এটা সাহায্য করবে.


1
আপনি আমাকে এত সহজ এবং দুর্দান্ত উত্তর দিচ্ছেন
jio srijyo

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

এবং নীচে getItemIndexById

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(এখানে columnNameযে ডিবি কলামটির নাম যেখানে আপনি জনসাধারণ ব্যবহার করেছেন 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

আপনি যদি এক্সএমএল লেআউটে স্পিনারের কাছে কোনও এক্সএমএল অ্যারে সেট করেন তবে আপনি এটি করতে পারেন

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

অ্যাডাপ্টারআরেতে সূচক অনুসন্ধান ব্যবহার করে এটি পাওয়ার একটি উপায় আছে এবং এটি সমস্তই প্রতিবিম্বের সাহায্যে করা যেতে পারে। আমি এমনকি আরও এক ধাপ এগিয়ে গিয়েছিলাম যেহেতু আমার কাছে 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
}

কাস্ট পদ্ধতি যা এখানে সমস্ত আদিমদের জন্য তৈরি করা যায় তা স্ট্রিং এবং ইন্টের জন্য একটি for

        /**
 *  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. কোডটি নীচে রাখুন যেখানে আপনি জানেন যে সর্বশেষতম স্পিনার মান উপস্থিত রয়েছে বা অন্য কোথাও প্রয়োজন অনুসারে। এই কোডের টুকরাটি মূলত SharedPreferences এ স্পিনার মানটি লিখে।

        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 থেকে যে আইটেমটি নির্বাচন করতে চাইছিলাম তার আইডিটি পুনরুদ্ধার করেছিলাম এবং তারপরে স্পিনারটিকে জনপ্রিয় করতে একটি কার্সরলডার ব্যবহার করেছি। অনলয়েডফিনিশডে আমি স্পর্শারের অ্যাডাপ্টারে পপুলেশন করে কার্সার দিয়ে সাইকেল চালিয়েছি যতক্ষণ না আমি ইতিমধ্যে থাকা আইডিটির সাথে মেলে এমন আইটেমটি খুঁজে পাই। তারপরে স্পেনারের নির্বাচিত অবস্থানে কার্সারের সারি নম্বর নির্ধারণ করুন। সুরক্ষিত স্পিনার ফলাফল সম্বলিত কোনও ফর্মের বিশদ বিশিষ্ট হওয়ার সময় আপনি স্পিনারে যে মানটি নির্বাচন করতে চান তার আইডিতে পাস করার অনুরূপ ফাংশনটি চমৎকার হবে।

@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

এখানে আমার আশা সম্পূর্ণ সমাধান। আমি নিম্নলিখিত এনাম আছে:

public enum HTTPMethod {GET, HEAD}

নিম্নলিখিত ক্লাসে ব্যবহৃত

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

এইচটিটিপিএমথোদ এনাম-সদস্য দ্বারা স্পিনার সেট করার কোড:

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

স্ট্যাকওভারফ্লোতে আপনাকে স্বাগতম। কেবলমাত্র কোডযুক্ত উত্তরগুলি "নিম্নমানের" হওয়ায় মুছে ফেলার জন্য পতাকাঙ্কিত হতে থাকে। প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে সহায়তা বিভাগটি পড়ুন এবং তারপরে আপনার উত্তরে কিছু মন্তব্য যুক্ত করার বিষয়ে বিবেচনা করুন।
গ্রাহাম

@ ব্যবহারকারী 2063903, দয়া করে আপনার উত্তরে ব্যাখ্যা যুক্ত করুন।
LuFFy

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

আশা করি এটা সাহায্য করবে! পিএস কোডটি কোটলিনে!


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

আপনি দেখতে পাচ্ছেন, অ্যারে। এক্সএমএল এবং আমি যেগুলির সাথে তুলনা করছি তার মধ্যে কেস সংবেদনশীলতার অতিরিক্ত জটিলতার জন্যও আমি হোঁচট খেয়েছি 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 [অবস্থান] এর মতো অবস্থানের সাথে পাস করতে হবে। এবং এটি সঠিকভাবে কাজ করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.