স্পিনারের নির্বাচিত আইটেমটি প্রোগ্রামিকভাবে সেট করুন


384

আমি একটি অ্যান্ড্রয়েড প্রকল্পে কাজ করছি এবং আমি একটি স্পিনার ব্যবহার করছি যা একটি অ্যারে অ্যাডাপ্টার ব্যবহার করে যা ডেটাবেস থেকে সঞ্চিত।

আমি কীভাবে তালিকা থেকে নির্বাচিত আইটেমটি প্রোগ্রামিয়ালি সেট করতে পারি তা খুঁজে পাচ্ছি না। উদাহরণস্বরূপ যদি, স্পিনারে আমার কাছে নিম্নলিখিত আইটেমগুলি থাকে:

  • বিভাগ 1
  • বিভাগ 2
  • বিভাগ 3

স্ক্রিনটি তৈরি হওয়ার পরে আমি কীভাবে প্রোগ্রামটি 2 বিভাগের নির্বাচিত আইটেমটি তৈরি করব program আমি ভাবছিলাম এটি সি # আই স্পিনারের সাথে সাদৃশ্যপূর্ণ হতে পারে eসেইলেক্টেড টেক্সট = "বিভাগ 2" তবে অ্যান্ড্রয়েডের সাথে এর মতো কোনও পদ্ধতি বলে মনে হচ্ছে না।


দয়া করে এই লিঙ্কটি অনুসরণ করুন: [স্পিনার আইটেমের উপর নির্বাচন কীভাবে সেট করবেন] [1] [1]: স্ট্যাকওভারফ্লো.com
ম্যাডি

1
আপনি আপনার সূচকটি এতে প্রবেশ করতে পারেন spinner.setSelection()। এটা ঠিক কাজ করবে। আপনি এমন একটি পদ্ধতিও তৈরি করতে পারেন যা আপনার সূচকে তাদের প্রকৃত স্ট্রিংয়ের সাথে মেলে সহায়তা করতে পারে।
তাসলিম ওসেনি

উত্তর:


736

নিম্নলিখিত ব্যবহার করুন: spinnerObject.setSelection(INDEX_OF_CATEGORY2)


285
ধন্যবাদ, এটি দুর্দান্ত কাজ করেছে, যখন আমি এটি করছিলাম তখন আমি অ্যাডাপ্টারের মাধ্যমে লুপের প্রয়োজন ছাড়াই সূচক পাওয়ার একটি উপায়ও পেয়েছি। আমি নিম্নলিখিতটি ব্যবহার করেছিmySpinner.setSelection(arrayAdapter.getPosition("Category 2"));
বোর্ডি

85
যদি আপনার অ্যাডাপ্টার রেফারেন্স না থাকে। mySpinner.setSelection (((ArrayAdapter) mySpinner.getAdapter ()) getPosition ( "মূল্য")।);
কালেল ওয়েড

3
sexSpinner.setSelection (adapter.getPosition (mUser.getGender ()) == -1? 0: adapter.getPosition (mUser.getGender ()));
গোফায়হেড

সেটএডাপ্টারের () পরে ঠিক সেটলেকশন () কল করা 1 ম আইটেমটি সর্বদা প্রদর্শিত হবে (অ্যান্ড্রয়েড 2.3), এমনকি ড্রপভিউতেও ভালটি নির্বাচিত হয়েছে। ভিউ.পোস্ট যুক্ত করুন () (@ মার্কো হার্নাইজ কাও উত্তর) এটি আমার জন্য ঠিক করুন।
খ্রিস্ট

3
স্পিনারের যদি আইটেমসিলেক্টডলাইস্টেনার () থাকে তবে এটি কাজ করে না। শ্রোতা বলা হবে না।
ডন ল্যারিক্স

79

এই উত্তরগুলির মধ্যে যে কোনও একটিই আমাকে সমাধান দেয়নি, কেবল এটির সাথে কাজ করেছে:

mySpinner.post(new Runnable() {
    @Override
    public void run() {
        mySpinner.setSelection(position);
    }
});

3
আমি সেটএডাপ্টার () এর ঠিক পরে সেটস্লেশন () বলি। এটি সর্বদা 1 ম আইটেমটি সর্বদা প্রদর্শন করে (অ্যান্ড্রয়েড 2.3), এমনকি ড্রপ ভিউতে ভালটি নির্বাচিত হয়। আপনার সমাধান আমার জন্য এটি করেছে।
খ্রিস্ট

2
ধন্যবাদ, যে কাজ! বিটিডাব্লু লিস্টভিউ.পস্ট.আরুন () পারফরম্যান্স আইটেমক্লিক () পাশাপাশি কাজ করে
মাইকেল ডি

আকারের ভিত্তিতে আমি কীভাবে শেষটি নির্বাচন করতে পারি?
jvargas

41
public static void selectSpinnerItemByValue(Spinner spnr, long value) {
    SimpleCursorAdapter adapter = (SimpleCursorAdapter) spnr.getAdapter();
    for (int position = 0; position < adapter.getCount(); position++) {
        if(adapter.getItemId(position) == value) {
            spnr.setSelection(position);
            return;
        }
    }
}

আপনি উপরের মত ব্যবহার করতে পারেন:

selectSpinnerItemByValue(spinnerObject, desiredValue);

এবং অবশ্যই আপনি সরাসরি পছন্দ অনুসারেও নির্বাচন করতে পারেন

spinnerObject.setSelection(index);

এই কোডটির সাথে একটি ত্রুটিটি হ'ল @ বার্ডি নির্বাচনটি বেছে নিতে চান বলে Category 2আমি মনে করি যে এটি একটি স্ট্রিং (ধরে নিচ্ছেন তিনি ব্যবহার করার চেষ্টা করেছেন Spinner.SelectedText = "Category 2") তবে উপরের কোডটি একটি এর জন্য long
অরুণ জর্জ

তিনি ডাটাবেস থেকে বিভাগগুলি পপুলেট করছেন সেখানে প্রতিটি বিভাগের জন্য অবশ্যই একটি আইডি থাকতে হবে।
ইয়াকুব আহমদ

1
কেন এটি একটি কার্সর অ্যাডাপ্টার? স্পিনারএডাপ্টার ঠিক পাশাপাশি কাজ করে।
গ্রেগ এনিস

আমি মনে করি আপনার এখানে ভুল আছে, এটি হওয়া উচিত adapter.getItem(position), না adapter.getItemId(position)
ভাদিম কোতোভ

29

কিছু ব্যাখ্যা (কমপক্ষে খণ্ডগুলির জন্য - খাঁটি ক্রিয়াকলাপ দিয়ে কখনও চেষ্টা করা হয়নি)। আশা করি এটি অ্যান্ড্রয়েডকে আরও ভালভাবে বুঝতে কেউ সহায়তা করে।

অরুণ জর্জের সর্বাধিক জনপ্রিয় উত্তর সঠিক তবে কিছু ক্ষেত্রে কাজ করবেন না। মার্কো এইচসি
দ্বারা উত্তর রান্নেবল উইচ ব্যবহার করে অতিরিক্ত সিপিইউ লোডের কারণে এটি একটি সর্বশেষ অবলম্বন।

উত্তরটি হ'ল - আপনার সহজেই সেটলেশন () এ কল করার জন্য সঠিক জায়গাটি বেছে নেওয়া উচিত , উদাহরণস্বরূপ এটি আমার পক্ষে কাজ করে :

@Override
public void onResume() {
    super.onResume();

    yourSpinner.setSelection(pos);
 }

তবে এটি অনক্রিটভিউ () এ কাজ করবে না । আমি সন্দেহ করি যে এটি এই বিষয়টির আগ্রহের কারণ।

গোপনীয়তাটি হ'ল অ্যান্ড্রয়েডের সাথে আপনি যে কোনও পদ্ধতিতে আপনার পছন্দমতো কিছু করতে পারবেন না - ওফস :( - উপাদানগুলি কেবল প্রস্তুত নাও হতে পারে anotherএর উদাহরণ হিসাবে - আপনি স্ক্রোলভিউকে ওনক্রিট ভিউ () অথবা অন-রিসুমে () তে স্ক্রোল করতে পারবেন না () উত্তর এখানে দেখুন )


ধন্যবাদ - আমি জানতাম না টুকরাগুলিতে অনারিউম পদ্ধতিটি ছিল।
টুলমেকারস্টেভ

আমি একটি +18 দিতে পারব যাতে আপনার উত্তর @ মার্কো এইচসির চেয়ে উপরে। আপনি যে একমাত্র কাজটি করার জন্য বোঝানো হচ্ছে
সেগুলিই

15

একটি মান খুঁজে পেতে এবং এটি নির্বাচন করতে:

private void selectValue(Spinner spinner, Object value) {
    for (int i = 0; i < spinner.getCount(); i++) {
        if (spinner.getItemAtPosition(i).equals(value)) {
            spinner.setSelection(i);
            break;
        }
    }
}

12

আপনি ডিবি থেকে আপনার মানগুলি কেন ব্যবহার করবেন না এবং সেগুলি একটি অ্যারেলিস্টে সঞ্চয় করেন এবং তারপরে কেবল ব্যবহার করুন:

yourSpinner.setSelection(yourArrayList.indexOf("Category 1"));

1
ডেটাএডাপ্টার ব্যবহার করে বিবিধ সমাধানগুলি আমার পক্ষে কাজ করে নি, তবে অ্যারেলিস্ট ব্যবহার করে যে এই নমুনায় মানগুলি তৈরি হয়েছিল তা কৌশলটি করেছে।
ewall

8

অনুকূল সমাধানটি হ'ল:

    public String[] items= new String[]{"item1","item2","item3"};
    // here you can use array or list 
    ArrayAdapter adapter= new ArrayAdapter(Your_Context, R.layout.support_simple_spinner_dropdown_item, items);
    final Spinner itemsSpinner= (Spinner) findViewById(R.id.itemSpinner);
itemsSpinner.setAdapter(adapter);

আইটেমের অবস্থান পেতে স্বয়ংক্রিয়ভাবে নিম্নলিখিত বিবৃতি যুক্ত করুন

itemsSpinner.setSelection(itemsSpinner.getPosition("item2"));

7

আমি আমার ইউটিলিটি ক্লাসে যেমন করি তেমন কাজের জন্য আপনি জেনেরিক পদ্ধতি তৈরি করতে পারেন

public void SetSpinnerSelection(Spinner spinner,String[] array,String text) {
    for(int i=0;i<array.length;i++) {
        if(array[i].equals(text)) {
            spinner.setSelection(i);
        }
    }
}

5

আপনি সহজেই এটি সেট করতে পারেন: spinner.setSelection(1)1 এর পরিবর্তে, আপনি যে তালিকা প্রদর্শন করতে চান তার কোনও অবস্থান সেট করতে পারেন।


4

আমার একটি সিম্পল কার্সার অ্যাডাপ্টার রয়েছে তাই আমার এই পোস্টে রেসোস ব্যবহারের জন্য ডেটা নকল করতে হবে। সুতরাং, আমি আপনাকে এইভাবে চেষ্টা করার পরামর্শ দিচ্ছি:

for (int i = 0; i < spinnerRegion.getAdapter().getCount(); i++) {
    if (spinnerRegion.getItemIdAtPosition(i) == Integer
        .valueOf(signal.getInt(signal
            .getColumnIndexOrThrow("id_region")))) {
        spinnerRegion.setSelection(i);
        break;
    }
}

আমি মনে করি এটি একটি আসল উপায়


1
হ্যাঁ, সিম্পলসার্সার অ্যাডাপ্টারের ক্ষেত্রে, স্পিনারআজিগেশন.সেটটিআইডিএটপজিশন (i) একটি কার্সার দেয়, যা কলামগুলি পেতে ব্যবহার করা যেতে পারে।
ললিটম


2

আপনার যদি পরিচিতির একটি তালিকা থাকে তবে আপনি এটিগুলির জন্য যেতে পারেন:

((Spinner) view.findViewById(R.id.mobile)).setSelection(spinnerContactPersonDesignationAdapter.getPosition(schoolContact.get(i).getCONT_DESIGNATION()));

2

আমি জানি যে ইতিমধ্যে উত্তর দেওয়া হয়েছে, তবে একটি আইটেম নির্বাচন করার জন্য সহজ কোড, খুব সাধারণ:

spGenre.setSelection( ( (ArrayAdapter) spGenre.getAdapter()).getPosition(client.getGenre()) );

2
  for (int x = 0; x < spRaca.getAdapter().getCount(); x++) {
            if (spRaca.getItemIdAtPosition(x) == reprodutor.getId()) {
                spRaca.setSelection(x);
                break;
            }
        }

4
আপনার উত্তরটি ব্যাখ্যা করতে আপনি কিছুটা পাঠ্য যোগ করতে পারেন?
Kmeixner

2

এটি এই পৃষ্ঠার অন্য কোথাও মন্তব্যে বলা হয়েছে তবে এটি উত্তরের দিকে টানতে কার্যকর বলে মনে হয়েছে:

একটা এডাপটার ব্যবহার করার সময়, আমি যে পেয়েছি spinnerObject.setSelection(INDEX_OF_CATEGORY2)চাহিদা ঘটতে পরেsetAdapter কল; অন্যথায়, প্রথম আইটেমটি সর্বদা প্রাথমিক নির্বাচন।

// spinner setup...
spinnerObject.setAdapter(myAdapter);
spinnerObject.setSelection(INDEX_OF_CATEGORY2);

এটি এর জন্য অ্যাবস্পিনার কোড পর্যালোচনা করে নিশ্চিত করা হয়েছে setAdapter


অবশ্যই, আপনি অ্যাডাপ্টারটি পূরণ করার পরে কেবল কোনও আইটেম নির্বাচন করতে পারেন।
কুলমাইন্ড

2

আমি কোটলিনে এটি ব্যবহার করি:

spinner.setSelection(resources.getStringArray(R.array.choices).indexOf("Choice 1"))

যদি indexOfএকটি ম্যাচ করতে পারবেন না, তাহলে এটি ফেরৎ -1দ্বারা নির্বাচিত হওয়ার ডিফল্ট মান স্থাপিত যা প্রদর্শিত spinner.setSelection। আমি ঠিক আছে।
lasec0203

0

আমার ক্ষেত্রে, এই কোডটি আমার দিনটি রক্ষা করেছে:

public static void selectSpinnerItemByValue(Spinner spnr, long value) {
    SpinnerAdapter adapter = spnr.getAdapter();
    for (int position = 0; position < adapter.getCount(); position++) {
        if(adapter.getItemId(position) == value) {
            spnr.setSelection(position);
            return;
        }
    }
}

আপনার এটি করার দরকার নেই। অ্যাডাপ্টারের একটি গেটপজিশন (আইটেম) কল রয়েছে যা পূর্বে অবস্থান দেয়।
tzg

0

বেশিরভাগ সময় spinner.setSelection(i); //i is 0 to (size-1) of adapter's size কাজ করে না। আপনি যদি শুধু কল করুনspinner.setSelection(i);

এটি আপনার যুক্তি নির্ভর করে।

যদি ভিউটি পুরোপুরি লোড হয় এবং আপনি এটি ইন্টারফেস থেকে কল করতে চান তবে আমি আপনাকে কল করার পরামর্শ দিই

spinner.setAdapter(spinner_no_of_hospitals.getAdapter());
spinner.setSelection(i); // i is 0 or within adapter size

বা আপনি যদি ক্রিয়াকলাপ / টুকরা লাইফসাইকের মধ্যে পরিবর্তন করতে চান তবে এই জাতীয় কল করুন

spinner.post(new Runnable() {
  @Override public void run() {
    spinner.setSelection(i);
  }
});

0

আমি Spinnerডেটা লোড এবং আইটেম নির্বাচন ট্র্যাকিং এর জন্য কিছু এক্সটেনশন ফাংশন করেছি ।

Spinner.kt

fun <T> Spinner.load(context: Context, items: List<T>, item: T? = null) {
    adapter = ArrayAdapter(context, android.R.layout.simple_spinner_item, items).apply {
        setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    }

    if (item != null && items.isNotEmpty()) setSelection(items.indexOf(item))
}

inline fun Spinner.onItemSelected(
    crossinline itemSelected: (
        parent: AdapterView<*>,
        view: View,
        position: Int,
        id: Long
    ) -> Unit
) {
    onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
        override fun onNothingSelected(parent: AdapterView<*>?) {
        }

        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            itemSelected.invoke(parent, view, position, id)
        }
    }
}

ব্যবহারের উদাহরণ

val list = listOf("String 1", "String 2", "String 3")
val defaultData = "String 2"

// load data to spinner
your_spinner.load(context, list, defaultData)

// load data without default selection, it points to first item
your_spinner.load(context, list)

// for watching item selection
your_spinner.onItemSelected { parent, view, position, id -> 
    // do on item selection
}

-1

এটি আমার পক্ষে কাজ করেছে:

@Override
protected void onStart() {
    super.onStart();
    mySpinner.setSelection(position);
}

এটি @ sberezin এর সমাধানের মতো তবে অন স্টার্ট () তে সেটস্লেশন () কল করে।


-1

গতকাল থেকে আমার একই সমস্যা ছিল U দুর্ভাগ্যক্রমে অ্যারে তালিকার প্রথম আইটেমটি স্পিনার উইজেটে ডিফল্টরূপে প্রদর্শিত হয় A কোডটি এখানে।

OnResume()
{
int before_index = ShowLastSelectedElement();
if (isFound){
      Collections.swap(yourArrayList,before_index,0);
   }
adapter = new ArrayAdapter<String>(CurrentActivity.this,
                            android.R.layout.simple_spinner_item, yourArrayList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item;                    yourListView.setAdapter(adapter);
}
...
private int ShowLastSelectedElement() {
        String strName = "";
        int swap_index = 0;
        for (int i=0;i<societies.size();i++){
            strName = yourArrayList.get(i);
            if (strName.trim().toLowerCase().equals(lastselectedelement.trim().toLowerCase())){
                swap_index = i;
                isFound = true;
            }
        }
        return swap_index;
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.