2009-10-31 11 views
6

मेरे पास एंड्रॉइड Spinner है और जब उपयोगकर्ता अपने पॉपअप संवाद से कुछ चुनता है तो मैं कॉलबैक प्राप्त करना चाहता हूं। ऐसा लगता है कि setOnItemClickListener() या setOnItemSelectedListener() उपयोग करने का सही तरीका होगा, लेकिन जब मैं स्पिनर में से किसी एक आइटम का चयन करता हूं तो न तो इनकार किया जाता है।स्पिनर पॉपअप संवाद को खारिज करते समय कॉलबैक कैसे प्राप्त करें?

क्या ऐसा करने का कोई सही तरीका है? उपयोग setOnItemSelectedListener()

final Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    spinner.setAdapter(new ArrayAdapter<SettingValue>(getContext(), android.R.layout.simple_list_item_1, android.R.id.text1, setting.getSettingValues())); 
    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 

     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      Log.d("BOOGA"); 
      final SettingValue settingValue = (SettingValue)parent.getSelectedItem(); 
      final Editor edit = getContext().getSharedPreferences(PREFS_CONTEXT_NAME, Context.MODE_PRIVATE).edit(); 
      edit.putString(setting.name(), settingValue.name()); 
      edit.commit(); 
     } 

     public void onNothingSelected(AdapterView<?> parent) { 
      // do nothing 
     } 

    }); 

उत्तर

1

:

अद्यतन

प्रति commonsware के सुझाव, मैं निम्नलिखित किया था, लेकिन मेरी onItemSelected() विधि कभी नहीं बुलाया जा रहा है। यहां मेरे book examples में से एक है:

/*** 
    Copyright (c) 2008-2009 CommonsWare, LLC 

    Licensed under the Apache License, Version 2.0 (the "License"); you may 
    not use this file except in compliance with the License. You may obtain 
    a copy of the License at 
     http://www.apache.org/licenses/LICENSE-2.0 
    Unless required by applicable law or agreed to in writing, software 
    distributed under the License is distributed on an "AS IS" BASIS, 
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
    See the License for the specific language governing permissions and 
    limitations under the License. 
*/ 

package com.commonsware.android.selection; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Spinner; 
import android.widget.TextView; 

public class SpinnerDemo extends Activity 
    implements AdapterView.OnItemSelectedListener { 
    TextView selection; 
    String[] items={"lorem", "ipsum", "dolor", "sit", "amet", 
        "consectetuer", "adipiscing", "elit", "morbi", "vel", 
        "ligula", "vitae", "arcu", "aliquet", "mollis", 
        "etiam", "vel", "erat", "placerat", "ante", 
        "porttitor", "sodales", "pellentesque", "augue", "purus"}; 

    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     setContentView(R.layout.main); 
     selection=(TextView)findViewById(R.id.selection); 

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

     ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, items); 

     aa.setDropDownViewResource(
      android.R.layout.simple_spinner_dropdown_item); 
     spin.setAdapter(aa); 
    } 

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

    public void onNothingSelected(AdapterView<?> parent) { 
     selection.setText(""); 
    } 
} 
+1

उस कोड के लिए धन्यवाद, कॉमन्सवेयर। मैंने कोशिश की और यह मेरे लिए काम नहीं कर रहा है। 'OnItem चयनित()' श्रोता को किसी कारण से कभी नहीं बुलाया जा रहा है। ऊपर मेरा अपडेट देखें। कोई विचार? – emmby

+0

आप मेरे कोड का उपयोग नहीं कर रहे हैं। यदि आप दोनों की तुलना करते हैं, तो आप देखेंगे कि आप अपने ArrayAdapter कन्स्ट्रक्टर के दूसरे पैरामीटर में स्पिनर संसाधन का उपयोग नहीं कर रहे हैं, और आप उस एडाप्टर को ड्रॉप-डाउन संसाधन की आपूर्ति नहीं कर रहे हैं। उन दो चीजों को ठीक करें और देखें कि क्या यह आपकी समस्या को साफ़ करता है या नहीं। यदि नहीं, तो अन्य मतभेदों की तलाश करें। – CommonsWare

+10

यह बहुत उपयोगी कोड है लेकिन इसमें उस मामले को शामिल नहीं किया गया है जहां उपयोगकर्ता स्पिनर को छोड़ देता है (यानी स्पिनर के बाहर इसे बंद करने के लिए स्पर्श करता है)। देशी स्पिनर कोड में एक प्रमुख दोष है - पॉपअप या संवाद के खुले या बंद होने के लिए कोई श्रोता या कॉलबैक ईवेंट नहीं हैं। उदाहरण के लिए, पॉपअप के आधार पर स्पिनर हेडर को खोलना या बंद करना (शायद एक तीर या कुछ बदलना) असंभव प्रतीत होता है। – Batdude

संबंधित मुद्दे