Search code examples
androidandroid-spinneronitemselectedlistener

Invoking a Spinner onitemselect listener


I'm really close to getting my spinner to do something when an item is selected. I just can't figure out how to set up the onitemselectedlistener correctly. I think my problem is not knowing how to pass the arguments to my onItemSelected method. Help to get the final part of this working is very much appreciated.

Here is the code:

public class MainActivity extends AppCompatActivity {



    Spinner spinner;
    String[][] testScoreList = new String[3][3];

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //Load test scores into arraylist
        nameArrayListMethod();
        spinner.setOnItemSelectedListener(onItemSelected());


    }

    //This method loads test scores into an array and populates spinner
    public void nameArrayListMethod (){

        InputStreamReader InputSR = null;
        BufferedReader BufferedRdr = null;
        String thisLine = null;

        AssetManager am = getAssets();
        String[] SpinnerNames = new String[3];

        try {
            InputSR = new InputStreamReader(am.open("scoresdata/test_scores.txt"));
            BufferedRdr = new BufferedReader(InputSR);

            // open input stream test_scores for reading purpose.

            int i = 0;
            while ((thisLine = BufferedRdr.readLine()) != null) {
                 //System.out.println(thisLine);

                String[] parts = thisLine.split(" ");
                testScoreList[i][0] = parts[0];
                testScoreList[i][1] = parts[1];
                testScoreList[i][2] = parts[2];

                SpinnerNames[i] = testScoreList[i][0]; //Extract first column for spinner
                i = i +1;
            }
            BufferedRdr.close();
            InputSR.close();

        } catch (Exception e) {
            e.printStackTrace();

        }

        spinner= (Spinner) findViewById(R.id.spinner1);

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

    }

    public void onItemSelected(AdapterView<?> parent, View view, int pos,long id) {
        Toast.makeText(parent.getContext(),
                "OnItemSelectedListener : " + parent.getItemAtPosition(pos).toString(),
                Toast.LENGTH_SHORT).show();
    }

}

Solution

  • You can add data Tow ways

    Method 1

    if you have a simple one line data the use this method.

    step 1

    Add string array in string.xml file

     <string-array name="ArrayName">
            <item>A</item>
            <item>B</item>
            <item>C</item>
            <item>D</item>
            <item>E</item>
            <item>F</item>
        </string-array>
    

    add android:entries="@string/ArrayName" in your xml spinner component

    and get selected value using String text = spinner.getSelectedItem().toString();

    Spinner.setOnItemSelectedListener(new OnItemSelectedListener() 
    {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) 
        {
            Toast.makeText(topThis, "Value = "+spinner.getSelectedItem().toString();, Toast.LENGTH_LONG).show();
        }
    
        @Override
        public void onNothingSelected(AdapterView<?> parentView) 
        {
            Toast.makeText(topThis, "herf", Toast.LENGTH_LONG).show();
        }
    });
    

    Method 2

    for using custom adapter HERE is complete tutorial