Search code examples
androidclosuresprogrammatically-createdonitemselectedlistener

Android: Pass iteration value to onItemSelectedListener


Hi I am creating a list of spinners dynamically based on a user choice. Here I am also implementing OnItemSelectedListener for each of the spinners, since there are multiple spinners I want to know which spinner's method is currently being accessed. Here's the code,

     for (int i = 0; i < count; i++) {
        ArrayList<String> spinnerArray = new ArrayList<String>();
        spinnerArray.add("one");
        spinnerArray.add("two");
        spinnerArray.add("three");
        spinnerArray.add("four");
        spinnerArray.add("five");

        Spinner spinner = new Spinner(this);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            public void onItemSelected(AdapterView<?> parent, View view,
                    int position, long id) {

                Object item = parent.getItemAtPosition(position);
                Log.d("vij-debug", "selector1 no is " + item);
                Log.d("vij-debug", "selector1 id is"+ view.getId());

                 //medicineArray1[i][1]=(String)item;
                // here I want to access the iteration value i



            }

            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
                this, android.R.layout.simple_spinner_dropdown_item,
                spinnerArray);
        spinner.setAdapter(spinnerArrayAdapter);

Can anyone suggest a suitable solution?


Solution

  • Set the Spinner's tag to i upon creation, then retrieve it from the AdapterView<?> parent parameter in onItemSelected().

    Spinner spinner = new Spinner(this);
    spinner.setTag(i);
    ...
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
        {
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
            {
                int spinnerNumber = parent.getTag();
            }
            ...
        }
    );