使用onItemSelectedListener在运行时更改微调器的适配器

时间:2011-05-26 09:51:44

标签: android spinner

这是我的代码

[...]
final String[] top_spinner_items = new String[35];
for (int i = 0; i < top_spinner_items.length; i++) {
    top_spinner_items[i] = Integer.toString(i+1);
}
ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, top_spinner_items);
spn_topItemsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
[...]



AdapterView.OnItemSelectedListener lst_bottomSpinner_changed_element = new OnItemSelectedListener() {

    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
        //
        final String[] top_spinner_items = new String[35];
        for (int i = 0; i < top_spinner_items.length; i++) {
            top_spinner_items[i] = Integer.toString(i+1);
        }
        ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, top_spinner_items);
        spn_topItemsAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    }

    public void onNothingSelected(AdapterView<?> parentView) {
        // your code here
    }

};

(代码中所有缺少的引用都在代码之间或之前)

我的问题是为什么在AdapterView.OnItemSelectedListener

ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_spinner_item, top_spinner_items);

给出错误。它说“构造函数未定义”。我尝试使用android.widget.ArrayAdapter,但没有得到。 当我更改前一个微调器时,我正在尝试更改微调器的适配器(我希望第二个微调器具有在前一个微调器中设置的值)

你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您遇到编译错误,因为您将AdapterView.OnItemSelectedListener的实例传递给适配器的构造函数而不是上下文。修改onItemSelected中的代码,在Activity之前添加this的类名:

ArrayAdapter<String> spn_topItemsAdapter = new ArrayAdapter<String>(YourActivity.this,
            android.R.layout.simple_spinner_item, top_spinner_items);

而且,您错过了将适配器设置为ListView中的inItemSelected,例如parentView.setAdapter(spn_topItemsAdapter);
但是,我认为,更改onItemSelected中的整个适配器并不是一个好主意。你最好修改现有的。