दिलचस्प पोस्ट
केवल लिनक्स `खोज` के साथ फाइल नाम कैसे प्राप्त करें? अजीब प्रयास -अनुरोध-शेष-अंतराल वापसी के साथ व्यवहार इन क्वेरी के लिए iBatis (myBatis) के साथ एनोटेशन का उपयोग कैसे करें? उत्पादन के लिए एक कोणीय ऐप को कैसे बंडल करें सी -> आकारफ़ाइल स्ट्रिंग हमेशा 8 है SQL अद्यतन कथन में सी # हाइबरनेट आईडी जेनरेटर ओपन गेल में ऑब्जेक्ट ऑब्जेक्ट को कैसे मॉनिटर करना चाहिए? AngularJS। टैग मान को परिवर्तित करें (मानव-पठनीय समय के लिए यूनिक्स का समय) कैसे तय करने के लिए "आपका रुबी संस्करण 1.9.3 है, लेकिन आपके Gemfile निर्दिष्ट 2.0.0" Laravel आदेश एक रिश्ते पर बैकबोन.जे: दृश्य का पुनर्मूल्यांकन या पुनर्निर्माण करना? अजगर की मुख्य विधि को समझना CodeIgniter के साथ URL में पैरामीटर प्राप्त करें सर्वर की ओर से पता चलता है कि कुकीज़ अक्षम हैं या नहीं

एंड्रॉइड स्पिनर: चयनित आइटम परिवर्तन ईवेंट प्राप्त करें

चयनित आइटम बदलते समय आप स्पिनर के लिए ईवेंट श्रोता कैसे सेट कर सकते हैं?

असल में मैं जो करने की कोशिश कर रहा हूं वह इस तरह से कुछ है:

spinner1.onSelectionChange = handleSelectionChange; void handleSelectionChange(Object sender){ //handle event } 

Solutions Collecting From Web of "एंड्रॉइड स्पिनर: चयनित आइटम परिवर्तन ईवेंट प्राप्त करें"

पिछले कुछ उत्तर सही नहीं हैं। वे अन्य विगेट्स और विचारों के लिए काम करते हैं, लेकिन स्पिनर विजेट के दस्तावेज स्पष्ट रूप से बताते हैं:

एक स्पिनर आइटम क्लिक ईवेंट का समर्थन नहीं करता है इस विधि को कॉल करने से अपवाद उत्पन्न होगा।

बेहतर इसके बजाय OnItemSelectedListener () का उपयोग करें:

 spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // your code here } @Override public void onNothingSelected(AdapterView<?> parentView) { // your code here } }); 

यह मेरे लिए काम करता है

नोट करें कि जब भी दृश्य बनाया जा रहा है, तो आप उस पर इटैम से चुनी गई विधि भी लागू होते हैं, ताकि आप उसे onCreate() विधि कॉल में डालकर विचार कर सकते हैं।

 Spinner spnLocale = (Spinner)findViewById(R.id.spnLocale); spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { // Your code here } public void onNothingSelected(AdapterView<?> adapterView) { return; } }); 

नोट: एक बात याद रखें

Spinner OnItemSelectedListener ईवेंट दो बार निष्पादित करेगा:

  1. स्पिनर आरंभीकरण
  2. उपयोगकर्ता मैन्युअल रूप से चयनित

फ्लैग वैरिएबल का उपयोग करके उन दोनों को अंतर करने का प्रयास करें।

आप अपनी गतिविधि में AdapterView.OnItemSelectedListener वर्ग को लागू कर सकते हैं।

और फिर onCreate() के नीचे की रेखा का उपयोग करें

 Spinner spin = (Spinner) findViewById(R.id.spinner); spin.setOnItemSelectedListener(this); 

फिर इन दो विधियों को ओवरराइड करें:

 public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { selection.setText(items[position]); } public void onNothingSelected(AdapterView<?> parent) { selection.setText(""); } 

https://stackoverflow.com/q/1714426/811625

आप ऑनइटम से चुने गए लिस्टनर () को एक सरल जांच के साथ बुलाया जा सकता है: एक पूर्णांक चर में वर्तमान चयन सूचकांक को स्टोर करें और कुछ भी करने से पहले ऑन-टाइम्स चयनित (..) में जांच करें।

उदाहरण के लिए:

 Spinner spnLocale; spnLocale = (Spinner)findViewById(R.id.spnLocale); int iCurrentSelection = spnLocale.getSelectedItemPosition(); spnLocale.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { if (iCurrentSelection != i){ // Your code here } iCurrentSelection = i; } public void onNothingSelected(AdapterView<?> adapterView) { return; } }); 

कारण iCurrentSelection ऑब्जेक्ट गुंजाइश में काम करने के लिए होना चाहिए!

स्पिनर-विजेट के लिए दस्तावेज़ कहते हैं: "स्पिनर आइटम पर क्लिक करने वाले ईवेंट का समर्थन नहीं करता है।" आपकी समस्या को संभालने के लिए आपको "setOnItemSelectedListener" का उपयोग करना चाहिए

 spinner1.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { //add some code here } ); 

अपना स्पिनर नाम खोजें और आईडी ढूंढें, इस विधि को लागू करें।

 spinnername.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // your code here } @Override public void onNothingSelected(AdapterView<?> parentView) { // your code here } }); 

स्पिनर की वर्तमान चयन के लिए एक वैश्विक वैरिएबल लें:

 int currentItem = 0; spinner_counter = (Spinner)findViewById(R.id.spinner_counter); String[] value={"20","40","60","80","100","All"}; aa=new ArrayAdapter<String>(this,R.layout.spinner_item_profile,value); aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner_counter.setAdapter(aa); spinner_counter.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { if(currentItem == position){ return; //do nothing } else { TextView spinner_item_text = (TextView) view; //write your code here } currentItem = position; } @Override public void onNothingSelected(AdapterView<?> parent) { } }); //R.layout.spinner_item_profile <?xml version="1.0" encoding="utf-8"?> <TextView android:id="@+id/spinner_item_text" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/border_close_profile" android:gravity="start" android:textColor="@color/black" android:paddingLeft="5dip" android:paddingStart="5dip" android:paddingTop="12dip" android:paddingBottom="12dip" /> //drawable/border_close_profile <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="#e2e3d7" /> </shape> </item> <item android:left="1dp" android:right="1dp" android:top="1dp" android:bottom="1dp"> <shape android:shape="rectangle"> <solid android:color="@color/white_text" /> </shape> </item> </layer-list> 
 spinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO Auto-generated method stub } //add some code here } ); 

इससे कोई फर्क नहीं पड़ता कि आप OnItemSelectedListener onCreate या onStart में सेट करेंगे – यह अभी भी गतिविधि निर्माण या प्रारंभ (क्रमशः) के दौरान कहा जाएगा।
इसलिए हम इसे सेट पर सेट कर सकते हैं (और प्रारंभ में नहीं!)
पहला इनिशियलाइज़ेशन जानने के लिए सिर्फ एक फ्लैग जोड़ें:

 private Spinner mSpinner; private boolean mSpinnerInitialized; 

फिर ऑन क्रिएट (या क्रिएटिव्यू) में बस:

 mSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { if (!mSpinnerInitialized) { mSpinnerInitialized = true; return; } // do stuff } public void onNothingSelected(AdapterView<?> adapterView) { return; } }); 

यदि आप चाइल्ड लेस्टनर पर सच्चाई चाहते हैं () हेन्डलर में प्रारंभिक मान को स्टोर करें और यह देखने के लिए जांचें कि क्या यह बदल गया है। यह सरल है और एक वैश्विक चर की आवश्यकता नहीं है यदि आपके पास पेज पर एक से अधिक स्पिनर हैं तो काम करता है।

 String initialValue = // get from Database or your object mySpinner.setOnItemSelectedListener(new SpinnerSelectedListener(initialValue)); 

 protected class SpinnerSelectedListener implements AdapterView.OnItemSelectedListener { private SpinnerSelectedListener() { super(); } public SpinnerSelectedListener(String initialValue) { this(); this.initialValue = initialValue; } private String initialValue; // getter and setter removed. @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { final String newValue = (String) spinHeight.getItemAtPosition(position); if (newValue.equals(initialValue) == false) { // Add your code here. The spinner has changed value. // Maybe useful. // initialValue = newValue; } } @Override public void onNothingSelected(AdapterView<?> parent) { // Maybe useful. // initialValue = null; } } 

वस्तुएं आपके दोस्त हैं, उनका उपयोग करें

स्टीफन क्लुम्प द्वारा उपरोक्त बहुत बढ़िया ने मुझे बहुत मदद की। धन्यवाद। मैं एक नौसिखिया हूं और "ओवरराइड" में इसके बारे में एक त्रुटि हुई, "उसी नाम की सुपर क्लास विधि को ओवरराइड करना चाहिए" ग्रहण ने सुझाव दिया है कि मुझे ओवरराइड को हटा देना चाहिए I जब मैंने यह किया, यह काम किया। कृपया मुझे मत पूछो कि कैसे या क्यों

सबसे अच्छा तरीका है जिसकी मुझे लगता है कि एक flagitemselected = 0 होगा; उकसाने में और आइटम पर चयनित इवेंट की बढ़ोतरी पर उस ध्वज को ध्वजांकित किया गया, जिसे चुना गया ++; और फिर जांचें कि (flagitemselected! = 1) {// अपने काम यहाँ है}। यह मुझे लगता है मदद मिलेगी

मैंने पाया कि एक चाल अपने सेट ओएनआईटीम्स से चुने हुए लिस्टनर को ऑन-विन्डो फोकस में बदल दिया गया था, बजाय क्रिएट पर। मुझे इस तरह से करने के लिए कोई बुरा दुष्प्रभाव नहीं मिला है, फिर भी असल में, श्रोताओं को खिड़की तैयार होने के बाद सेट करें मुझे यकीन नहीं है कि विन्डो फोकस बदलते समय कितनी बार चलाता है, लेकिन यदि आप इसे बहुत बार चल रहे हैं तो अपने आप को एक लॉक चर बनाने के लिए आसान है

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