简体   繁体   中英

Android spinners: How to write java code for them?

I am trying to make a GPA calculator. I have a bunch of spinners in two columns. 7 in each. I have put in an array of strings to be displayed in the drop down list. Now, I want to write code in java for saying if the user selects "four" from the drop down list, then the input should be considered as number 4 later to multiply it with for example if the user chose grade A, then to multiply with 4. How do I do this? I created an array adapter but it's not working. i am getting "Nan" as the answer. I have looked it up and it says Nan is displayed when the number is undefined. Any help would be appreciated. Thank you!

Should I be using some kind of onClickListener like I used for my button? How does the computer know that it has to equate gradepoint to 4 if the user picks grade A?

This is what I did (which obviously is wrong):

if(spinner1.getSelectedItem().equals("A+")) gradepoint1=4.00;
        if(spinner1.getSelectedItem().equals("A")) gradepoint1=4.00;
        if(spinner1.getSelectedItem().equals("A-")) gradepoint1=3.67;
        if(spinner1.getSelectedItem().equals("B+")) gradepoint1=3.33;
        if(spinner1.getSelectedItem().equals("B")) gradepoint1=3.00;
        if(spinner1.getSelectedItem().equals("B-")) gradepoint1=2.67;
        if(spinner1.getSelectedItem().equals("C+")) gradepoint1=2.33;
        if(spinner1.getSelectedItem().equals("C")) gradepoint1=2.00;
        if(spinner1.getSelectedItem().equals("C-")) gradepoint1=1.67;
        if(spinner1.getSelectedItem().equals("D+")) gradepoint1=1.33;
        if(spinner1.getSelectedItem().equals("D")) gradepoint1=1.00;
        if(spinner1.getSelectedItem().equals("D-")) gradepoint1=0.67;
        if(spinner1.getSelectedItem().equals("F")) gradepoint1=0.00;
        if(spinner1.getSelectedItem().equals("ABS")) gradepoint1=0.00;

You can have a hashmap of the values and then select the value based on the selected item

HashMap<String, Double> mGrades;

public void test(){
    Spinner spinner1 = new Spinner(this);

    mGrades = new HashMap<String, Double>();
    mGrades.put("A+", 4.00);
    mGrades.put("A", 4.00);
    //Etc.....

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, mGrades.keySet().toArray(new String[0]));

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner1.setAdapter(adapter);

    spinner1.setOnItemSelectedListener(this);
}

public void onItemSelected(AdapterView<?> parent, View view, 
        int pos, long id) {
    // An item was selected. You can retrieve the selected item using
    // parent.getItemAtPosition(pos)
    Log.d("TAG", String.valueOf(mGrades.get(mGrades.keySet().toArray()[pos])));
}

public void onNothingSelected(AdapterView<?> parent) {
    // Another interface callback
}

It may be a bit slower then using some other method, but hey. Its something simple.

I suggest you do something like this:

Before you're oncreate:

float[] gradeValues = { 4f, 3.67f, 3.33f, 3.00f, 2.67f, 2.33f, 2.00f,1.33f,1.00f,0.67f,0.00f,0.00f};

String [] gradeAlpabetic = {"A+","A","A-","B+","B","B-","C+","C","C-","D+","D","D-","F","ABS"};

Here the first value, 4f, has the position 0, and the next has 1 and so on.

The value "A+" will be at position 0 on the spinner, so this way we know which grade goes with which grade value.

In onViewCreated or OnCreate:

ArrayAdapter<String> gradesArrayAdap = new ArrayAdapter<String>(
            getActivity(), R.layout.spinnerlayout, gradeAlphabetic);

    gradesSpinner.setAdapter(GradesArrayAdapter);


  gradeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        public void onItemSelected(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            getGrades();

        }

        @Override
        public void onNothingSelected(AdapterView<?> arg0) {

        }
    });

Then you put this outside the onViewCreated/onCreate.

public void getGrades(){


       String grade = gradeSpinner.getSelectedItemPosition();
       float theGrade = Float.parseFloat(gradeValue(grade);

      System.out.println("Your grade in float is: " + theGrade);

}

Hope it helps.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM