2010-03-24 47 views
14

我有一個EditText,一個按鈕和一個微調器。點擊按鈕時,微調器將添加一個新的項目,並在EditText中輸入您輸入的名稱。但這裏是一個問題,我的adapter.add()方法似乎不起作用......這裏是我的代碼:如何將項目添加到Spinner的ArrayAdapter?

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) { 

     }}); 
} 

}

的感謝! ...仍在等待

+0

你一定不要」您需要再次在您的View.OnClickListener中調用spinner.setAdapter()。 雖然你的代碼看起來應該可以工作。 – synic 2010-03-24 04:46:22

+1

你也不需要調用'notifyDataSetChanged()'。只需'adapter.add()'就足夠了。當你說「不起作用」時,你是什麼意思? – CommonsWare 2010-03-24 11:51:50

+0

我找到了答案,有人告訴我,再次調用notifyDataSetChanged()和setAdapter()可以幫助。所以我添加它,但它仍然不起作用...當我運行它,然後單擊按鈕。會跳出一個錯誤:應用程序已經停止不期望。請再試一次...(我認爲問題是在方法spinner.add()。)感謝您的幫助! – allen 2010-03-25 01:20:30

回答

1

我相信這是按照設計工作的,但並不像預期的那樣。 ArrayAdapter僅用於獲取數組,但列表構造函數稍後添加。我猜測它只是在列表中做一個toArray()。這就是爲什麼您必須調用適配器上的添加或在您的列表更改時創建新適配器的原因。

14

創建ArrayAdapter時,您還沒有爲其指定可調整大小的List,因此當您執行add()時,它無法增加大小並引發UnsupportedOperationException。

嘗試這樣:

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

您應該使用一個列表。對於諸如CharSequence []的數組,您將得到相同的UnsupportedOperationException異常。

3

Javi是正確的,除了不引用第二個參數的數組。

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

您可以創建一個ArrayList和所有訴諸複製到該對象,然後創建arrayadaptor和發送此ArrayList和onclicklistener按鈕,添加的EditText內容ArrayList對象,然後調用notifydatasetchanged adator的