2010-08-19 11 views
7

java.lang.RuntimeException "एडाप्टर व्यू के लिए setOnClickListener को कॉल न करें। आप शायद इसके बजाय setOnItemClickListener चाहते हैं," लेकिन यह सही नहीं है। मैं नए चयन के आधार पर कुछ सामान करने के लिए setOnItemClickListener का उपयोग कर रहा हूं, लेकिन उपयोगकर्ता चयन को बदलने से पहले मुझे कुछ सामान करने की भी आवश्यकता है। विशेष रूप से, मैं प्रत्येक चयन के लिए डेटा एकत्र कर रहा हूं जिसे किसी अन्य चयन में जाने से पहले फ़ाइल में सहेजने की आवश्यकता होती है, क्योंकि दूसरा चयन डेटा के विभिन्न सेट से जुड़ा होता है। एंड्रॉइड स्पिनर के साथ setOnClickListener का उपयोग करने का कोई तरीका है?एंड्रॉइड स्पिनर के साथ setOnClickListener का उपयोग करने का कोई तरीका है?

spinner.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View v) { 
     // Do some stuff before the user changes the selection 
     ... 

spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, 
      View view, int pos, long id) { 
      // Do some stuff based onItemSelected 
      ... 
+2

एक नया (कामकाजी) समाधान यहां उपलब्ध है: http://stackoverflow.com/a/8520801/406090 – OferR

उत्तर

5

आप (सामान्य रूप से आईडी के साथ एक TextView: android.R.id.text1) अंतर्निहित दृश्य पर श्रोता क्लिक करें सेट करना होगा स्पिनर की। ऐसा करने के लिए:

  • एक कस्टम स्पिनर
  • निर्माता में (विशेषताओं के साथ) बनाएं लेआउट android.R.layout.simple_spinner_item
  • एक findViewById करो (android.R.id की आपूर्ति करके स्पिनर बनाने .text1) TextView
  • अब TextView
+0

तो ऑनक्लिकलिस्टर को कस्टम स्पिनर के अंदर परिभाषित किया जाएगा? क्या मैं गतिविधि में स्पिनर पर एक ऑनक्लिकलिस्टर भी परिभाषित कर सकता हूं? – Namratha

+0

मैंने आपके द्वारा सुझाए गए दृष्टिकोण की कोशिश की- क्लिक पंजीकृत है लेकिन ड्रॉपडाउन अभी भी काम करता है। स्पिनर पर क्लिक करने के बाद से मैं ड्रॉपडाउन को काम करने से कैसे रोकूं मैं दूसरी स्क्रीन पर जा रहा हूं। – Namratha

+0

मैंने एंड्रॉइड के साथ ऐसा किया: क्लिक करने योग्य = "झूठा" – Namratha

7

को onClickListener सेट प्राप्त करने के लिए आप ontouch घटनाओं

का उपयोग कर एक onclick घटना को दोहराने कर सकते हैं
this.spinner=(Spinner)findViewById(R.id.spinner); 
    this.spinner.setClickable(false); 
    this.spinner.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      Log.v(TAG, "spinner touch"); 

      //replicating a click 
      if(event.getAction() == MotionEvent.ACTION_UP){ 
       v.playSoundEffect(android.view.SoundEffectConstants.CLICK); 
      } 
      return true; 
     } 
    }); 
+0

+1 नए आदर्श – kemdo

+1

@ dcart1234 के लिए +1 आपको झूठ वापस करना होगा अन्यथा स्पिनर पॉप अप नहीं खोलेंगे .. – Praveen

+0

आपने spinner.setClickable (false) क्यों कहा? – programmer

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

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