Set Key and Value in spinner

前端 未结 3 1679
孤街浪徒
孤街浪徒 2020-11-27 12:13

I have a spiner and I want set a key and a value on this,I use of HashMap,It\'s work,but show one row,like this:

相关标签:
3条回答
  • 2020-11-27 13:03

    Use a LinkedHashMap and store the "strings that you want to display in the spinner" as the keys and the object that you would like to retrieve based on the spinner selection as the values . For eg. , for some reason you have a Float datatype associated with the spinner items , use:

    LinkedHashMap<String , Float> aMap = new LinkedHashMap<>(10);
    

    Then for the spinner , we can set the values as :

        ArrayList<String> values = new ArrayList<>(aMap.keySet());
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item,values);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    

    Finally , in the OnItemSelectedListener , retrieve the float value as:

     @Override
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    aMap.get(adapterView.getItemAtPosition(i));
                    
                }
    
    0 讨论(0)
  • 2020-11-27 13:04

    Better approach to populate spinner with key and value should be :

    Step 1 : Create POJO class which will take care of key and value

    public class Country {
    
        private String id;
        private String name;
    
        public Country(String id, String name) {
            this.id = id;
            this.name = name;
        }
    
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    
        //to display object as a string in spinner
        @Override
        public String toString() {
            return name;
        }
    
        @Override
        public boolean equals(Object obj) {
            if(obj instanceof Country){
                Country c = (Country )obj;
                if(c.getName().equals(name) && c.getId()==id ) return true;
            }
    
            return false;
        }
    
    }
    



    Note : toString() method is important as it is responsible for displaying the data in spinner,you can modify toString() as per your need

    Step 2 : Prepare data to be loaded in spinner

     private void setData() {
    
            ArrayList<Country> countryList = new ArrayList<>();
            //Add countries
    
            countryList.add(new Country("1", "India"));
            countryList.add(new Country("2", "USA"));
            countryList.add(new Country("3", "China"));
            countryList.add(new Country("4", "UK"));
    
            //fill data in spinner 
            ArrayAdapter<Country> adapter = new ArrayAdapter<Country>(context, android.R.layout.simple_spinner_dropdown_item, countryList);
            spinner_country.setAdapter(adapter);
            spinner_country.setSelection(adapter.getPosition(myItem));//Optional to set the selected item.    
        }
    


    Step 3 : and finally get selected item's key and value in onitemselected listener method of spinner

    spinner_country.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
    
                     Country country = (Country) parent.getSelectedItem();
                     Toast.makeText(context, "Country ID: "+country.getId()+",  Country Name : "+country.getName(), Toast.LENGTH_SHORT).show();    
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {    
                }
            });
    


    All the best , Happy coding !

    0 讨论(0)
  • 2020-11-27 13:07

    Try to use HashMap to store Key-Value pair data and in your case spinner item index as key and Province_ID as value. Check below example for more details.

    Prepare value for spinner

    String[] spinnerArray = new String[Province_ID.size()];
    HashMap<Integer,String> spinnerMap = new HashMap<Integer, String>();
    for (int i = 0; i < Province_ID.size(); i++)
    {
       spinnerMap.put(i,Province_ID.get(i));
       spinnerArray[i] = Province_NAME.get(i);
    }
    

    Set value to spinner

    ArrayAdapter<String> adapter =new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, spinnerArray);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);
    

    Get value to spinner

    String name = spinner.getSelectedItem().toString();
    String id = spinnerMap.get(spinner.getSelectedItemPosition());
    
    0 讨论(0)
提交回复
热议问题