2012-05-02 15 views
0

私はアプリケーションで作業しており、スピンウィジェットに関するいくつかの助けが必要です。 配列は作成時にエントリがなく、別の関数で埋められます。だから私はこの機能でスピナーを更新するためにとspinner.setAdapter(adapter);を使用しなければならないと思います。ただ、教育目的のためにAndroid Spinnerはアイテムを追加します

// global variables 
    String[] test = new String[100]; 
    int x = 0; 
    Spinner s; 
    ArrayAdapter adapter; 
    Button btn1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 
     s = (Spinner) findViewById(R.id.spinner1); 
     adapter = new ArrayAdapter(this, 
     android.R.layout.simple_spinner_item, test); 
    } 

    public void onClick(View arg0) { 
     test[x] = String.valueOf(x);; 
     x++; 
     adapter.add(test[x]); 
     s.setAdapter(adapter); 
    } 

私はこれを試してみましたが、バグがのonClick()関数の中で依然として存在しています。 何かがArrayAdapterで行われなければならないと思います。しかし私はこれに慣れておらず、ボタンを押してそれを追加する例は見つからなかった。 おそらくどこか他の場所で単純な障害がありますが、現在は表示されません。ここ

完全なコード:

ArrayList<Integer> test; 
    int x = 0; 
    Spinner s; 
    ArrayAdapter adapter; 
    Button btn1; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     btn1 = (Button) findViewById(R.id.button1); 
     btn1.setOnClickListener(this); 
     s = (Spinner) findViewById(R.id.spinner1); 
     test = new ArrayList<Integer>(); 
     adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, test); 
    } 

    public void onClick(View arg0) { 
     test.add(x); 
     x++; 
     s.setAdapter(adapter); 
    } 

答えて

0

xを配列要素に追加し、この要素をadapter.addメソッドに渡します。これは実質的にadapter.add(x);を使用するのと同じです。

なぜ、配列の代わりにArrayListを使用しないでください。 ArrayListsは動的であり、初期サイズを与える必要はありません。 ArrayListのコンストラクタがあり、Arrayクラスと互換性があり、Listクラスの子孫が必要であることが非常に素早く確認されています。以下のコード例を参照してください。

ArrayList<Integer> test = new ArrayList<Integer>(); 

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

私はこれがあなたの問題の完全な解決策が、それを行う可能性がより良い方法への単なるポインタではありません知っています。

「実行時にandroid updating arrayAdapter」という用語でWeb検索を行います。より具体的な例が出てくることは間違いありません。

+0

ありがとう、問題は解決しました。 これまでにArrayListを使用したことはありませんでしたが、実際は普通の配列の代わりに非常に快適なものです。 – Silu

0

問題は、あなたが押したときに100のヌル文字列であることをArrayAdapterのデータを設定し、その範囲の後に追加されていますボタン。 test変数をnew String[0]に変更してみてください。

onClickメソッドでは、adapter.add(String)と電話するだけです。それはあなたの現在のデータの最後にそれを追加するので、最初は十分大きな配列を与える必要はありません。

+0

これは意味があります。しかし、配列を 'new String [0]'に変更して 'onClick'関数を適合させるだけではうまくいきません(私は試しました)。 まだUnsupportetOperationExceptionがあります。とにかくAndrew Sがより良い解決策を見つけた(それのおかげで)。 ご協力いただきありがとうございます。 – Silu

+0

ああ、add関数は 'List'を使うときにのみサポートしなければなりません –

関連する問題