2010-03-24 11 views
14

मेरे पास एक संपादन टेक्स्ट, एक बटन और एक स्पिनर था। बटन पर क्लिक करते समय, स्पिनर आपके द्वारा संपादित टेक्स्ट में दर्ज नाम के साथ एक नया आइटम जोड़ देगा।स्पिनर के ऐरे एडाप्टर में आइटम कैसे जोड़ें?

public class Spr extends Activity { 
Button bt1; 
EditText et; 
ArrayAdapter<CharSequence> adapter; 
Spinner spinner; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    bt1 = (Button)this.findViewById(R.id.bt1); 
    et = (EditText)this.findViewById(R.id.et); 
    spinner = (Spinner)this.findViewById(R.id.spr); 

    adapter = ArrayAdapter.createFromResource(
      this, R.array.planets_array, android.R.layout.simple_spinner_item); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    spinner.setAdapter(adapter); 

    bt1.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      String temp = et.getText().toString(); 

      adapter.add(temp); 
      adapter.notifyDataSetChanged(); 
      spinner.setAdapter(adapter); 

     } 
    }); 


    spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){ 

     @Override 
     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(); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 

     }}); 
} 

}

धन्यवाद: लेकिन यहां सवाल यह है कि, मेरे adapter.add() विधि लगता है काम नहीं करता है ... यहाँ मेरी कोड है! ... अभी भी

+0

आप निश्चित रूप से डॉन ' t को फिर से अपने View.OnClickListener में spinner.setAdapter() को कॉल करने की आवश्यकता है। आपका कोड लगता है कि यह काम करना चाहिए, हालांकि। – synic

+1

आपको 'NotifyDataSetChanged() 'को कॉल करने की आवश्यकता नहीं है। बस 'adapter.add()' पर्याप्त होना चाहिए। जब आप कहते हैं "काम नहीं करता", तो आपका क्या मतलब है? – CommonsWare

+0

मैं जवाब seached, और कोई मुझसे कहता है, फोन notifyDataSetChanged() और setAdapter() फिर से हो सकता है help.so मैं इसे जोड़ने के लिए, लेकिन यह अभी भी काम नहीं करता है ... जब मैं इसे चलाने के लिए, और बटन .it क्लिक करें एक त्रुटि को उछाल देगा: एप्लिकेशन ने उम्मीदपूर्वक बंद कर दिया है। कृपया पुनः प्रयास करें ... (मुझे लगता है कि समस्या spinner.add() पर है।) आपकी मदद के लिए धन्यवाद! – allen

उत्तर

1

मुझे विश्वास है कि यह डिज़ाइन के रूप में काम कर रहा है, लेकिन अपेक्षित नहीं है। ArrayAdapter केवल एक सरणी लेता था, लेकिन सूची निर्माता को बाद में जोड़ा गया था। मैं बस अपनी सूची में एक toArray() कर रहा हूँ। यही कारण है कि आपको एडाप्टर पर या तो कॉल करना होगा, या जब आपकी सूची बदलती है तो एक नया एडाप्टर बनाना होगा।

14

आप अपने ArrayAdapter बनाया है जब आप इसे करने के लिए एक resizeable सूची निर्दिष्ट नहीं की है, इसलिए जब आप में शामिल कर सकता() यह यह के आकार को नहीं बढ़ाया जा सकता है और एक UnsupportedOperationException फेंकता है। इस तरह

कोशिश कुछ:

List<CharSequence> planets = new ArrayList<CharSequence>(); 
adapter = new ArrayAdapter<CharSequence>(context, 
         R.array.planets_array, planets); 
//now you can call adapter.add() 

आप एक सूची का उपयोग करना चाहिए। Charrayequence जैसे Array के साथ [] आपको वही असमर्थितऑपरेशन अपवाद अपवाद प्राप्त होगा।

3

जैवी सही है सिवाय इसके कि दूसरे पैरामीटर के लिए सरणी को संदर्भित न करें।

adapter = new ArrayAdapter<CharSequence>(this, 
    android.R.layout.simple_spinner_item, 
    someList); 
0

आप एक ArrayList बना सकते हैं और इस वस्तु के लिए सभी सहारा नकल तो arrayadaptor बना सकते हैं और इस ArrayList भेजने के लिए और बटन के onclicklistener में, वस्तु ArrayList करने के लिए तो adator की notifydatasetchanged कॉल edittext सामग्री जोड़ने

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

  • कोई संबंधित समस्या नहीं^_^