Makers_F
Makers_F

Reputation: 3063

Change the adapter of a spinner on runtime using onItemSelectedListener

This is my code

[...]
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
    }

};

(all the missing references are in the code are between or before the code)

My question is why inside AdapterView.OnItemSelectedListener

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

gives error. It says "the constructor is undefined". I tryed using android.widget.ArrayAdapter, but got none. I'm trying to change the adapter of a spinner when a previous spinner is changed(i want the second spinner to have the value setted in the previous one)

Do you have any idea?

Upvotes: 1

Views: 2309

Answers (1)

ernazm
ernazm

Reputation: 9258

You got a compile error because you pass an instance of AdapterView.OnItemSelectedListener to the constructor of the adapter instead of context. Modify your code in onItemSelected, adding classname of your Activity before this:

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

And, you missed setting the adapter to your ListView in inItemSelected, like parentView.setAdapter(spn_topItemsAdapter);.
However, I think, changing whole adapter in onItemSelected isn't a good idea. You'd better modify the existing one.

Upvotes: 2

Related Questions