Android Spinner: Seçilmiş maddə dəyişikliyini əldə edin

Seçilən maddə seçildikdə sayğac üçün bir hadisə dinləyicisini necə qura bilərsiniz?

Əsasən mən nə etməyə çalışsam budur:

 spinner1.onSelectionChange = handleSelectionChange; void handleSelectionChange(Object sender){ //handle event } 
341
26 авг. Soni Əli tərəfindən təyin olunan 26 av. 2009-08-26 23:53 '09 at 11:53 AM 2009-08-26 23:53
@ 15 cavab

Əvvəlki cavabların bəziləri yanlışdır. Digər widgets və fikirlər üçün işləyirlər, lakin Spinner widgetının sənədləri aydın şəkildə deyilir:

Sayaç, hadisə klik elementini dəstəkləmir. Bu metodu çağırmaq istisna gətirəcəkdir.

Bunun əvəzinə OnItemSelectedListener () istifadə etmək daha yaxşıdır:

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

Mənim üçün işləyir.

OnItemSelected metodunun bir görünüş yaradıldığı zaman da çağırıldığına diqqət yetirilsin, ona bir onCreate() metodu zəng daxilində yazaraq baxa bilər.

720
11 нояб. Cavab znq 11 noyabrda verilir. 2009-11-11 13:50 '09 da 13:50 'da 2009-11-11 13:50
 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; } }); 

Qeyd: bir şey saxla.

Spinner OnItemSelectedListener iki dəfə işləyəcək:

border=0
  • Spinner Initialization
  • İstifadəçi əllə seçilir

Bu iki bayraq dəyişən ilə fərqlənməyə çalışın.

48
29 апр. Santhosh tərəfindən 29 apreldə cavab verildi 2010-04-29 08:15 '10 saat 08:15 'da 2010-04-29 08:15

AdapterView.OnItemSelectedListener sinif AdapterView.OnItemSelectedListener tətbiq edə bilərsiniz.

onCreate() alt satırından istifadə edin

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

Sonra bu iki metoddan kənarlaşdırın:

 public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { selection.setText(items[position]); } public void onNothingSelected(AdapterView<?> parent) { selection.setText(""); } 
15
27 марта '13 в 14:15 2013-03-27 14:15 Cavab 27 mart 2013 - il saat 14:15 da Dhasneem'de veriləcək

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

Sadə bir çek ilə OnItemSelectedListener () zəngindən qaçınmaq olar: bir tamsaylı dəyişəndə ​​cari seçim indeksini saxlayaraq bir şey etməzdən əvvəl onItemSelected (..) içərisində qeyd edin.

məsələn:

 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 bu iş üçün obyekt sahəsi olmalıdır çünki!

13
24 нояб. Cavab Sampath 24 noyabrda verilir . 2011-11-24 18:20 '11 saat 18:20 'da 2011-11-24 18:20

Vidalı widget üçün sənədlər deyirlər: "Spinner elementə vurma hadisələrini dəstəkləmir." Probleminizi həll etmək üçün "setOnItemSelectedListener" istifadə etməliyəm.

6
07 нояб. johndotnet tərəfindən verilmiş cavab 07 Nov. 2009-11-07 00:13 '09 at 0:13 2009-11-07 00:13
 spinner1.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() { //add some code here } ); 
5
28 авг. Chiwai Chan tərəfindən verilmiş cavab 28 av . 2009-08-28 15:33 '09 at 15:33 'da 2009-08-28 15:33

İpinizin adını tapın və id tapın, sonra bu üsulu tətbiq edin.

 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 } }); 
5
10 дек. Cavab droidster.me 10 dekabr verilir. 2012-12-10 08:41 '12 at 8:41 pm 2012-12-10 08:41

OnItemSelectedListenerni onCreate və ya onStart üzərinə qoyduğunuzda əhəmiyyəti yoxdur - bu, fəaliyyətin yaradılması və ya başlanması zamanı hələ də adlanır.
Ona görə də biz onu (və onstart deyil) yaratmaq üçün qura bilərik.
İlk başlanğıcını təyin etmək üçün yalnız bir bayraq əlavə edin:

 private Spinner mSpinner; private boolean mSpinnerInitialized; 

onCreate (və ya onCreateView) sadədir:

 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; } }); 
3
23 авг. Leo Droidcoder tərəfindən verilmiş cavab 23 av. 2016-08-23 16:02 '16 saat 16:02 'da 2016-08-23 16:02

Doğru onChangedListener () ehtiyacınız varsa. İşəgötürəndə başlanğıc dəyərini qeyd edin və dəyişdiyini yoxlayın. Bu sadədir və qlobal dəyişməni tələb etmir . Sayfada birdən çox sayaç varsa işləyir.

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

Nesneler sizin dostunuzdur, onlardan istifadə edin.

3
22 нояб. Cavab 22 noyabr tarixində fishjd verilir 2016-11-22 02:00 '16 'da 2:00' də 2016-11-22 02:00 'də
 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 } ); 
2
11 нояб. Cavab kaub0st3r 11 noyabrda verilir. 2013-11-11 19:07 '13 at 19:07 2013-11-11 19:07

cari seçicinin seçilməsi üçün qlobal dəyişənə keçin:

 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> 
2
27 июля '16 в 7:34 2016-07-27 07:34 Cavab indrajeet 27 iyul 'da 7:34' də verilir 2016-07-27 07:34

Düşündüyüm ən yaxşı yolu, flagitemselected = 0; oncreate. Və seçilmiş hadisə artımının elementi olan bayrağı olan yəni flagitemselected ++; və sonra (bayraqla seçilmiş! = 1) {// burada işləməyin) olub olmadığını yoxlayın. Bu mənim tahminimə kömək edəcək

0
16 марта '12 в 10:50 2012-03-16 10:50 cavab 16 mart 2012-ci ildə saat 10.50-da Pinakin tərəfindən verilmişdir 2012-03-16 10:50

Stefan Klampın parlaq performansı da mənə çox kömək etdi. Təşəkkür edirik. Mən bir başlanğıcıyam və "@ Override" də səhv "Super Class üsulunu eyni adla əldən verməlidir". Eclipse, overrides aradan qaldırılması təklif etdi. Bunu etdiyim zaman, işləyirdi. Xahiş edirəm, necə və ya niyə soruşma.

0
31 дек. Cavab 31 dekabr tarixində user241569 tərəfindən verilmişdir. 2009-12-31 17:37 '10 at 17:37 2009-12-31 17:37

Bu, spinnerin işə salınması və tapılmasına dair işləyəcək və bu işə yarayacaqdır.

  Spinner schemeStatusSpinner; schemeStatusSpinner = (Spinner) dialog.findViewById(R.id.spinner); schemeStatusSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { // your code here if(schemeStatusSpinner.getSelectedItemId()==4){ reasonll.setVisibility(View.VISIBLE); } else { reasonll.setVisibility(View.GONE); } } @Override public void onNothingSelected(AdapterView<?> parentView) { // your code here } }); 
0
09 янв. cavab sanjay 09 jan verildi . 2019-01-09 16:02 '19 saat 16:02 'da 2019-01-09 16:02

Mən tapdığım bir şey, sizin setOnItemSelectedListeners'ınız onCreate əvəzinə onWindowFocusChanged-də daxil edildi. Mən bunun üçün heç bir pis yan təsiri tapa bilməmişəm. Əsasən, pəncərə çəkildikdən sonra dinləyiciləri fərdiləşdirin. OnWindowFocusChanged'ın necə tez-tez işlədiyinə əmin deyiləm, lakin çox tez-tez işləyirsə, özünüz üçün maneə yarayan bir dəyişən yaratmaq üçün kifayətdir.

Hesab edirəm ki, Android bir mesaj göndərmə sistemindən istifadə edə bilər və bütün bunları onCreate üzərinə qoyarsanız, tərtib edildikdən sonra sayğacın dolduğu vəziyyətlərlə qarşılaşa bilərsiniz. Bu yolla, maddənin yerini təyin etdikdən sonra dinləyiciniz çıxacaq. Əlbəttə ki, bu məqbul bir təxmindir, amma bu barədə məni düzəltməkdən çəkinməyin.

-1
10 авг. Joe Plante tərəfindən verilmiş cavab 10 Avqust 2012-08-10 21:36 '12 at 21:36 2012-08-10 21:36

bağlı digər suallar və ya bir sual