2010-07-08 18 views
88

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

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); 
    } 
}); 

मैंने विधियों को सम्मिलित करने, निकालने और साफ़ करने का प्रयास किया, और उनमें से कोई भी काम नहीं किया। क्या कोई मुझे बताएगा कि मैंने क्या गलत किया?

उत्तर

254

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

समाधान उपयोग एक 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); 

चीयर्स!

+7

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

+2

एक संपादन जोड़ा गया ... :) कृपया इसे फिर से पढ़ें। – st0le

+0

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

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