2012-05-27 79 views
0

我在onCreate方法一以下微調:更新微調從其他方法

spinnerArrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, accounts); 
     spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // The drop down view 
     spinner.setAdapter(spinnerArrayAdapter); 
     spinner.setOnItemSelectedListener(this); 

,我想添加一些條目到微調的其他方法是這樣的:

spinnerArrayAdapter.add(value.toString()); 
spinner.setAdapter(spinnerArrayAdapter); 

但應用程序崩潰。我能做什麼? 謝謝!

+0

什麼:

你的情況的init它這樣

如此是來自'logcat'的錯誤? – Luksprog

回答

1

你有2種可能:

或者: spinnerArrayAdapter.add("Your new item"); spinnerArrayAdapter.notifyDataSetChanged();

的地方,你將要新記錄添加到適配器

或者:

在您的onCreate初始化適配器時添加spinnerArrayAdapter.setNotifyOnChange(true); 當您想要將記錄添加到適配器後,只需致電spinnerArrayAdapter.add("Your new item");即可。無需調用notifyDataSetChanged(),因爲它在內部已被add調用。

在這兩種情況下,您都不必將適配器重新分配給微調器。

如果使用數組初始化適配器,add方法將引發異常,因爲內部適配器存儲的是(List<T>) Arrays.asList(objects),其中objects是您在構造函數中提供的數組。 asList返回數組中的List接口包裝器實現,因此它不支持添加操作。爲了能夠使用適配器的添加方法,您必須提供支持數據作爲列表支持添加/刪除方法 - 我建議ArrayList。

spinnerArrayAdapter = new ArrayAdapter<String>(
     this, android.R.layout.simple_spinner_item, 
     new ArrayList<String>(Arrays.asList(accounts))); 

或更長的時間,但比較有效(例如,你不創造 開銷清單對象進行片刻後放棄)

final int length = accounts.length; 
ArrayList<String> backingData = new ArrayList<String>(length); 
for(int i=0; i<length; i++) { 
    backingData.add(i, accounts[i]); 
} 
spinnerArrayAdapter = new ArrayAdapter<String>(
     this, android.R.layout.simple_spinner_item, backingData); 
+0

我總是得到java.lang.UnsupportedOperationException。我聲明瞭一個全局變量public ArrayAdapter spinnerArrayAdapter;在onCreate方法我做如下:spinnerArrayAdapter = new ArrayAdapter (this,android.R.layout.simple_spinner_item,accounts);並在onClick方法中2.可能性:spinnerArrayAdapter.add(「Your new item」); – user1390816

+0

什麼是「賬戶」?數組,列表或ArrayList? –

+0

對不起,它是一個String []數組。我在onCreate方法中創建數組,然後將其放入微調器中。這工作正常。但是當我想在onClick方法中添加另一個項目時,應用程序崩潰。 – user1390816

0

這可能工作...

ArrayList<String> accounts = new ArrayList<String>(Arrays.asList("Item A", "Item B")); 
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this, R.layout.list_item, accounts); 

spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
spinnerArrayAdapter.add("Item C"); 
spinnerArrayAdapter.setNotifyOnChange(true); 

spinner.setOnItemSelectedListener(this); 
spinner.setAdapter(spinnerArrayAdapter); 
+0

謝謝!問題是,我沒有帶有Items的xml文件,因此R.layout.list_item未知。 spinnerArrayAdapter = new ArrayAdapter (this,android.R.layout.simple_spinner_item ,, accounts);編譯器告訴我:構造函數ArrayAdapter (新的DialogInterface.OnClickListener(){},int,String [])未定義 – user1390816