2011-02-27 44 views
3

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

02-27 18:01:17.728: ERROR/AndroidRuntime(1982): java.lang.UnsupportedOperationException 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at java.util.AbstractList.add(AbstractList.java:410) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at java.util.AbstractList.add(AbstractList.java:432) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.widget.ArrayAdapter.add(ArrayAdapter.java:178) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at org.example.SpinnerKiran.SpinnerKiran$1.onClick(SpinnerKiran.java:56) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.View.performClick(View.java:2179) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.View.onTouchEvent(View.java:3828) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.widget.TextView.onTouchEvent(TextView.java:6291) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.View.dispatchTouchEvent(View.java:3368) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:863) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1707) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1197) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.app.Activity.dispatchTouchEvent(Activity.java:1993) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1691) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1525) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.os.Looper.loop(Looper.java:123) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at android.app.ActivityThread.main(ActivityThread.java:3948) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at java.lang.reflect.Method.invoke(Method.java:521) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540) 
02-27 18:01:17.728: ERROR/AndroidRuntime(1982):  at dalvik.system.NativeStart.main(Native Method) 
+0

相似的[這裏](http://stackoverflow.com/questions/5125350/android-arrayadapter-add-method-not-working) –

回答

6

ArrayAdapter已經基於List,所以你不需要製作一個自定義適配器來使用List。但是,它使用它創建的List或數組。它不會將元素複製到新列表中。如果你給它一個固定長度的數組,那麼你不能添加或刪除成員。

創建一個List傳遞給構造函數。請注意,從Arrays.asList()創建的列表將不起作用,因爲這只是原始數組的表示。

 spinner = (Spinner)this.findViewById(R.id.dynamicSpinner); 
     CharSequence[] itemArray = 
       getResources().getTextArray(R.array.simple_from_length); 
     List<CharSequence> itemList = 
       new ArrayList<CharSequence>(Arrays.asList(itemArray)); 

     adapter = new ArrayAdapter(this, 
       android.R.layout.simple_spinner_item, 
       itemList); 

     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

     spinner.setAdapter(adapter); 

你也可以使用一個List <字符串>和getResources.getStringArray(),或任何方便。

+0

List itemList = new ArrayList (itemArray);這個語句未執行itemArray列表中不支持 – Narasimha

+0

@narasimha:對不起。 ArrayList需要一個List參數,而不是一個數組。編輯糾正。 – erichamion

+0

非常感謝你的寶貴回覆 – Narasimha

0

你需要:這個文件的

bt1 = (Button)this.findViewById(R.id.AddBtn); 
      et = (EditText)this.findViewById(R.id.newSpinnerItemText); 
      spinner = (Spinner)this.findViewById(R.id.dynamicSpinner); 

      adapter = ArrayAdapter.createFromResource(
        this, R.array.simple_from_length, 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); 

       } 
      }); 

錯誤創建一個自定義適配器,該適配器可能基於List<String>,並且自己實現add方法。在add方法中,您需要添加到適配器的內部項目列表(字符串) createFromResource的結果基於CharSequence[],它以固定大小返回並且不會動態增加。

1

你可以使用添加方法,如下面..

m_adapterForSpinner = new ArrayAdapter(this, android.R.layout.simple_spinner_item); 
m_adapterForSpinner.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);   
m_myDynamicSpinner.setAdapter(m_adapterForSpinner); 
m_adapterForSpinner.add("dummy item");   

//////////////////////////////////////////////////////////////// 
addButton.setOnTouchListener(new OnTouchListener(){ 
    public boolean onTouch(View v, MotionEvent event) { 

     final Dialog dialog=new Dialog(roughact.this); 
     dialog.setContentView(R.layout.dialog); 
     dialog.setTitle("Enter The Item"); 
     dialog.setCanceledOnTouchOutside(true); 

     final EditText filename=(EditText)dialog.findViewById(R.id.filename); 
     filename.setText(""); 

     Button d_ok=(Button)dialog.findViewById(R.id.d_ok); 
     Button d_cancel=(Button)dialog.findViewById(R.id.d_cancel); 
     d_ok.setOnTouchListener(new OnTouchListener(){ 
      public boolean onTouch(View v,MotionEvent me){ 

       CharSequence textHolder = "" + filename.getText(); 
       m_adapterForSpinner.add(textHolder); 

       dialog.dismiss(); 
       return false; 
      } 
     }); 
     d_cancel.setOnTouchListener(new OnTouchListener(){ 
      public boolean onTouch(View v,MotionEvent me){ 
       dialog.dismiss(); 
       return false; 
      } 
     }); 
     dialog.show(); 

     return false; 
    } 

嘗試this..It將幫助ü。

相關問題