2011-02-27 11 views
3

私はEditText、ボタンとスピナーを持っていました。ボタンをクリックすると、スピンナーはEditTextに入力した名前の新しい項目を追加します。どのようにアンドロイドのスピナーアレイアダプターにアイテムを追加する

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()から作成されたListは元の配列の単なる表記であるため動作しません。あなたはまた、リスト<文字列を使用することができます

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

>とgetResources.getStringArray()、または何が便利です。

+0

一覧<のCharSequence> itemListの=新しいのArrayList <のCharSequence>(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); 

       } 
      }); 

エラー:しかし、ここで質問ですが、私のadapter.add()メソッドが動作しないようですが...ここに私のコードですおそらくList<String>に基づいてカスタムアダプタを作成し、自分でaddメソッドを実装します。 addメソッドでは、アダプタの内部項目(文字列)のリストに追加する必要があります の結果は、固定サイズで返され、動的に増加されない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をuを助ける試してみてください。

関連する問題