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 个空字符串,然后在按下按钮时添加到该字符串的末尾。尝试将您的test变量更改为new String[0].

然后在您的onClick方法中,只需调用adapter.add(String). 它会将它添加到您当前数据的末尾,因此您最初不需要给它一个足够大的数组。

于 2012-05-02T16:49:38.787 回答
0

您将 x 添加到数组元素,然后将此元素传递给 adapter.add 方法。这实际上与使用:adapter.add(x); 相同。

为什么不使用 ArrayList 而不是数组。ArrayList 是动态的,不需要指定初始大小。一个非常快速的检查告诉我有一个与 ArrayLists 兼容的 Array Adapter 的构造函数,我希望 List 类的任何后代。请参阅下面的代码示例。

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

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

我知道这不是您问题的完整解决方案,而只是指向可能更好的解决方案的指针。

使用术语“android 在运行时更新 arrayAdapter”进行网络搜索,我相信你会偶然发现一个更具体的例子。

于 2012-05-02T17:22:41.370 回答