2012-06-25 202 views
0

在android應用程序中,我填充我的微調與來自EditText對象的一些數據。 當我試圖添加它與adapter.add(somestring)方法崩潰,所以我需要幫助。 ......這裏的代碼android adapter.add()崩潰我的應用程序

public class OptionsMenu extends Activity implements View.OnClickListener{ 

    Spinner users; 
    EditText input; 
    Button add,remove; 

    public static String filename = "savedData"; 
    SharedPreferences sharedData; 
    String stringUsers; 

    ArrayAdapter<CharSequence> adapter; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.options_menu); 

     Create(); 
     sharedData = getSharedPreferences(filename, 0);  
    } 

private void Create() { 
    // TODO Auto-generated method stub 
    users = (Spinner) findViewById(R.id.sp_op_users); 
    input = (EditText) findViewById(R.id.tb_op_inputUsers); 
    add = (Button) findViewById(R.id.bt_op_add); 
    remove = (Button) findViewById(R.id.bt_op_remove); 

    add.setOnClickListener(this); 
    remove.setOnClickListener(this); 

    //------------ADAPTER----------------- 
    adapter = ArrayAdapter.createFromResource(this, R.array.users, 
         android.R.layout.simple_spinner_item); 
    adapter.setDropDownViewResource(
       android.R.layout.simple_spinner_dropdown_item); 

    users.setAdapter(adapter); 
} 

public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch(v.getId()) 
    { 
     case R.id.bt_op_add: 
      if (!input.getText().toString().equals("")) { 
       CharSequence inputData = input.getText().toString(); 
       adapter.add(inputData); 

       adapter.notifyDataSetChanged(); 
       users.setAdapter(adapter); 
      } 
      input.setText(""); 
      users.setSelection(Adapter.NO_SELECTION); 
      break; 
     case R.id.bt_op_remove: 
      break; 
    } 
} 
+0

你可以發佈堆棧跟蹤嗎? –

回答

2

不是很清楚爲什麼你所得到的錯誤,但你if條件是錯誤的。

更改以下行:

if (input.getText().toString() != "") 

if (!input.getText().toString().equals("")) 

你不使用=跡象比較strings

編輯

也許你可以首先從資源文件的陣列和創建它的本地版本:

String[] usersList=getResources().getStringArray(R.array.users); 

adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, usersList) 

,並使用該usersList數據爲您adapter名單。

+0

你能解決你的問題嗎? –

+0

當我實現usersList時有一些錯誤,但有沒有辦法從資源的事情完全繞過整個數組...因爲我最終將我所有的微調項目保存在外部存儲... – user1480742

1

您使用createFromResource()創建了適配器併爲其提供了資源中的數據。如果你這樣做,列表是固定的,你不能添加或刪除它的元素。這就是爲什麼當你嘗試撥打adapter.add()時它會崩潰。

如果您想讓微調器包含動態數據,那麼您必須使用add()將所有元素添加到它,而不是從資源創建它。

編輯:添加代碼示例

中的onCreate

(),我們創建和初始化微調適配器

List<String> items = ... // These are your items you get from a resource or read 
         // from a file or whatever 
// Create the adapter, initializing it with the list of items, attach to spinner 
adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item); 
for (String item : items) { 
    adapter.add(item); 
} 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
users.setAdapter(adapter); 
中的onClick(),

將項目添加到微調:

case R.id.bt_op_add: 
    if (!input.getText().toString().equals("")) { 
     CharSequence inputData = input.getText().toString(); 
     adapter.add(inputData); 
     // You shouldn't need to reset the adapter on the spinner, nor call 
     // notifyDataSetChanged() here 
    } 
    input.setText(""); 
    users.setSelection(Adapter.NO_SELECTION); 
    break; 
+0

好吧,我該怎麼去實現適配器本身? – user1480742

+0

我編輯了我的答案,爲您添加了一些代碼。我沒有通過編譯器運行它,所以如果我錯過了分號或右括號,請原諒我。希望你明白這個主意。 –