ListView में ArrayAdapter को संशोधित करने में असमर्थ: UnsupportedOperationException


94

मैं एक सूची बनाने की कोशिश कर रहा हूं जिसमें नाम हैं। यह सूची परिवर्तनशील होनी चाहिए (जोड़ना, हटाना, क्रमबद्ध करना आदि)। हालाँकि, जब भी मैंने ArrayAdapter में आइटमों को बदलने की कोशिश की, प्रोग्राम java.lang.UnsupportedOperationExceptionत्रुटि के साथ क्रैश हो गया । यहाँ मेरा कोड है:

ListView panel = (ListView) findViewById(R.id.panel);
String[] array = {"a","b","c","d","e","f","g"};
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, array);
adapter.setNotifyOnChange(true);
panel.setAdapter(adapter);

Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
   @Override
   public void onClick(View v) {
      adapter.insert("h", 7);
   }
});

मैंने डालने की कोशिश की, हटाने और स्पष्ट तरीके, और उनमें से कोई भी काम नहीं किया। क्या कोई मुझे बताएगा कि मैंने क्या गलत किया?

जवाबों:


282

मैंने इसे आजमाया, खुद ... पाया यह काम नहीं किया। इसलिए मैंने ArrayAdapter के सोर्स कोड की जांच की और समस्या का पता लगाया। ArrayAdapter, एक सरणी द्वारा आरंभीकृत होने पर, सरणी को एक AbstractList (List) में परिवर्तित करता है जिसे संशोधित नहीं किया जा सकता है।

समाधानArrayList<String> ArrayAdapter को प्रारंभ करते समय किसी सरणी का उपयोग करने के बजाय उपयोग करें ।

String[] array = {"a","b","c","d","e","f","g"}; 
ArrayList<String> lst = new ArrayList<String>(Arrays.asList(array));
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
android.R.layout.simple_list_item_1, lst); 

चीयर्स!


8
आपको बहुत - बहुत धन्यवाद! आपने मुझे हताशा से बचाया। क्या आप मुझे समझाएंगे कि स्ट्रिंग [] ने काम क्यों नहीं किया?
रयान

@Ryan आप किसी ऐरे में नहीं डाल सकते, आप एक सूची में डाल सकते हैं, जब तक कि सूची कार्यान्वयन इसकी अनुमति नहीं देता। यदि आपका बैकिंग डेटा बदलने वाला नहीं है, तो ArrayAdapter आपको अधिक मेमोरी कुशल तकनीक का उपयोग करने की अनुमति देता है।
स्टीफन डेइन

@ st0le क्या फर्क पड़ता है अगर मैं "नया ArrayList <String> (Arrays.asList (array))" या "Arrays.asList (array)" पास करूं? पहला काम करता है और दूसरा नहीं।
गोलोसोव्स्की

1
@golosovsky, पहले एक में, आप एक Mutable List बनाते हैं, दूसरा तरीका एक Immutable List बनाता है। (एक बार बनाए जाने के बाद संशोधित नहीं किया जा सकता है)
0

3
यह 2016 है और अभी भी इस विशिष्ट परिदृश्य में यह हास्यास्पद अपवाद है।
Eido95
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.