kristyna
kristyna

Reputation: 2099

Android dependent spinners - onItemSelected does not fire

I tryed to create two dependent spinners. I know there is more than enough of this type of question, but nothing fixed my problem. It seems onItemSelected does not fire at all. I want the second (townships_spinner) change when first spinner (divisions_spinner) is selected or changed. Let's say I have states and cities, when I select the state a want to display only cities from given state. Spinners are created dynamicaly.

That's my code:

public class RegistrationActivity extends Activity implements AdapterView.OnItemSelectedListener {
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    ...
    createLayout();
  }

  public void createLayout(){
    division_spinner = new Spinner(this);

    ArrayAdapter division_adapter = new ArrayAdapter(this,R.layout.spinner,divisions.getList());
    divisions_id = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
    division_spinner.setAdapter(division_adapter);
    division_spinner.setSelection(divisions.getIndex(divisions_id));
    division_spinner.setOnItemSelectedListener(this);

    township_spinner = new Spinner(this);
    ArrayAdapter township_adapter = new ArrayAdapter(this,R.layout.spinner,townships_map.get(divisions_id));
    if (divisions_id == null) {
      township_spinner.setEnabled(false);
    }
    String value = viewer.getValueByKey(viewer_form.getViewers_form_viewers_inputname());
    township_spinner.setSelection(townships.getIndex(value, divisions_id));
  }

  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {

    Toast.makeText(RegistrationActivity.this, "Yes",Toast.LENGTH_LONG);
    if(arg0.equals(division_spinner)) {
        Toast.makeText(RegistrationActivity.this, "Yes - You got it!",Toast.LENGTH_LONG);

        township_spinner.setEnabled(true);
        ArrayAdapter township_adapter = new ArrayAdapter(this, R.layout.spinner, townships_map.get(((Division)division_spinner.getSelectedItem()).getDivisions_id().toString()));
        township_spinner.setAdapter(township_adapter);
    }
  }

  public void onNothingSelected(AdapterView<?> arg0) {

  }
}

But "Yes" even "Yes - you got it!" toast does not appear.

I guess I miss something stupid, but I cant find it.

Upvotes: 0

Views: 119

Answers (2)

kristyna
kristyna

Reputation: 2099

I made a series of mistakes that led to the fact that it did not work as I expected.

First: I forgot to call **show()** on Toast.makeText()

Second: I make a huge mistake when creating ArrayList. I filled ArrayList with data, then I put the list to HashMap and after that I called ArrayList.**clear()**. Which led to override the HashMap values, and that was why it seemed, the spinner was not changing at all...

Well... I feel quite silly ...

Upvotes: 0

cj1098
cj1098

Reputation: 1610

you're implementing AdapterView.onItemSelected.

...Just try this instead

Spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
{
    @Override
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
{
    Toast.makeText(topThis, "selected", Toast.LENGTH_LONG).show();
    //Call other spinner here to update.
}

@Override
public void onNothingSelected(AdapterView<?> parentView) 
{
    Toast.makeText(topThis, "nothing selected", Toast.LENGTH_LONG).show();
}
});

Edit: as Prasad says. If you don't have setContentView(View); your activity won't have an xml to inflate, so your views will never get created into anything.

Upvotes: 1

Related Questions