0

私はアプリに取り組んでおり、スピナー ウィジェットの助けが必要です。配列には作成時のエントリがなく、別の関数で埋められます。したがって、この関数でスピナーを使用adapter.add(item);spinner.setAdapter(adapter);て更新する必要があると思います。

// 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);
  }
4

2 に答える 2

0

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

次に、onClickメソッドで、を呼び出すだけadapter.add(String)です。現在のデータの最後に追加されるため、最初に十分な大きさの配列を指定する必要はありません。

于 2012-05-02T16:49:38.787 に答える
0

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

配列の代わりに ArrayList を使用しないのはなぜですか。ArrayLists は動的であり、初期サイズを指定する必要はありません。非常に簡単なチェックで、ArrayLists と互換性のある Array Adapter のコンストラクターがあり、List クラスの子孫が必要であることがわかりました。以下のコード例を参照してください。

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

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

これが問題の完全な解決策ではないことはわかっていますが、おそらくより良い方法へのポインタにすぎません。

「実行時にarrayAdapterを更新するアンドロイド」という用語でWeb検索を行うと、より具体的な例に出くわすと確信しています。

于 2012-05-02T17:22:41.370 に答える