2011-03-07 36 views
16

मेरे सिस्टम में दो स्पिनर हैं। अब मुझे पहले स्पिनर मूल्य के आधार पर दूसरे स्पिनर के चयनित मूल्य को बदलना होगा। जैसे ही उपयोगकर्ता पहला स्पिनर मान बदल देगा, दूसरा स्पिनर मान स्वचालित रूप से पहले स्पिनर के चयनित मूल्य के आधार पर सेट हो जाएगा। इसे कैसे कार्यान्वित करें?मूल्य पर स्पिनर

उत्तर

15
Hello Spinner ट्यूटोरियल से

:

अब एक नेस्टेड वर्ग कि AdapterView.OnItemSelectedListener लागू करता है बनाएँ। यह एक कॉलबैक विधि प्रदान करेगा जो स्पिनर से आइटम चुने जाने पर आपके एप्लिकेशन को सूचित करेगा। यहां बताया गया है इस वर्ग कैसा दिखना चाहिए:

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, 
     View view, int pos, long id) { 
     Toast.makeText(parent.getContext(), "The planet is " + 
      parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show(); 
    } 

    public void onNothingSelected(AdapterView parent) { 
     // Do nothing. 
    } 
} 

AdapterView.OnItemSelectedListener onItemSelected() और onNothingSelected() कॉलबैक तरीकों की आवश्यकता है। पूर्व को तब कहा जाता है जब एडाप्टर व्यू से कोई आइटम चुना जाता है, इस मामले में, एक छोटा टोस्ट संदेश चयनित टेक्स्ट प्रदर्शित करता है; और उत्तरार्द्ध को तब कहा जाता है जब एक एडाप्टर व्यू से चयन गायब हो जाता है, जो इस मामले में नहीं होता है, इसलिए इसे अनदेखा किया जाता है। अब MyOnItemSlectedListener को स्पिनर पर लागू करने की आवश्यकता है। ऑनक्रेट() विधि पर वापस जाएं और अंत में निम्न पंक्ति जोड़ें: spinner.setOnItemSlectedListener (नया MyOnItemSlectedListener());

दूसरे शब्दों में, आपको एक ऑनइटम सेलेक्टेड लिस्टर बनाने की आवश्यकता है जो दूसरे स्पिनर के मान को संशोधित करता है, और इसे पहले स्पिनर से जोड़ता है।

+0

क्या "उपकरण" के बिना इसे लागू करना संभव नहीं है? –

+2

मुझे प्रश्न समझ में नहीं आता है। आप एक अनाम वर्ग है कि इंटरफ़ेस को लागू करता है बना सकते हैं, लेकिन हाँ आप कुछ बिंदु पर एक वस्तु इसी क्रम में इंटरफ़ेस स्पिनर के लिए एक श्रोता के रूप में यह जोड़ने के लिए लागू करता है कि बनाना होगा। – I82Much

3

आपको पहली बार स्पिनर के पर पर स्थिति डालना होगा। इस उदाहरण से आप 1 स्पिनर के आधार पर 2 स्पिनर का मूल्य प्राप्त कर सकते हैं:

 public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) { 

     if(arg0.equals(spin0)){ 
     spin1.setClickable(true); 
        if(spin0.getSelectedItem().equals("India")) 
        { 
         ArrayAdapter <String> s1 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_india); 
         s1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s1); 
        } 
        else if(spin0.getSelectedItem().equals("Pakistan")) 
        { 
         ArrayAdapter <String> s2 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_pak); 
         s2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s2); 
        } 
        else if(spin0.getSelectedItem().equals("China")) 
        { 
         ArrayAdapter <String> s3 = new ArrayAdapter <String> (this,android.R.layout.simple_spinner_item,states_china); 
         s3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
         spin1.setAdapter(s3); 
        } 

     } 

    }  
+0

एक स्पिनर आइटम क्लिक ईवेंट का समर्थन नहीं करता है। इस विधि को कॉल करने से अपवाद बढ़ जाएगा। इसके बजाय AdapterView setOnItemSelectedListener का उपयोग करें। – felansu

1

आप प्रत्येक स्पिनर के लिए अलग से) onItemSelected (परिभाषित करना चाहिए। अन्यथा यदि स्पिनरों से कुछ भी चुना जाता है तो कोड निष्पादित हो जाता है।

newCategory.setOnItemSelectedListener(new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, 
       int arg2, long arg3) { 
      // TODO Auto-generated method stub 

      String selCat = newCategory.getItemAtPosition(arg2).toString(); 

      if (selCat != "New") 
      { 
       loadSpinnerData(topic); 
      } 
     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 

     } 
    }); 
    newTopic.setOnItemSelectedListener(new OnItemSelectedListener() { 


     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
      long arg3) { 
      // TODO Auto-generated method stub 
      loadSpinnerData() 
    } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub 
     } 
    }); 
+1

setOnItemClickListener स्पिनर – sandeep

+0

के साथ उपयोग नहीं किया जा सकता है यह अच्छी तरह से काम करता है, तो अगर आप अधिक वर्तमान गतिविधि में स्पिनर की तुलना में - क्यों नीचे वोट पता नहीं है ..... – DVN

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