简体   繁体   中英

How to multiply the values of spinners in Android

I am trying to find out how to multiply the values of two spinners and display the answer within a TextView. The code compiles, however, the application shuts down when ran. The code below is what I am currently using, however, it does not work. Thanks.

    spinnerStep1 =(Spinner) findViewById(R.id.step_1_spinner);
    Integer[] step1 = new Integer[]{0,1,2,3,4,5};
    ArrayAdapter<Integer> adapter1 = new ArrayAdapter<Integer>   (this,R.layout.spinner_item, step1);
    spinnerStep1.setAdapter(adapter1);
    spinnerStep1.setOnItemSelectedListener(this);


    spinnerStep2 =(Spinner) findViewById(R.id.step_2_spinner);
    Integer[] step2 = new Integer[]{0,1,2,3,4,5};
    ArrayAdapter<Integer> adapter2 = new ArrayAdapter<Integer>(this,R.layout.spinner_item, step2);
    spinnerStep2.setAdapter(adapter2);
    spinnerStep2.setOnItemSelectedListener(this);

    drakeAnswer = (TextView) findViewById(R.id.drake_answer);

}


@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {

    String myStr1 = spinnerStep1.getSelectedItem().toString();
    String myStr2 = spinnerStep2.getSelectedItem().toString();
    int myAnswer = 0;
    try {
        myAnswer = Integer.parseInt(myStr1) * Integer.parseInt(myStr2);
    }catch(NumberFormatException nfe) {

    }
    drakeAnswer.setText(myAnswer);


}

Best practice would be to fetch the two spinners and the text view again from within your onItemSelected method and you will need to also make sure you set a string value in the setText method:

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
    Spinner spinnerStep1 = (Spinner)findViewById(R.id.step_1_spinner);
    Spinner spinnerStep2 = (Spinner)findViewById(R.id.step_2_spinner);
    String myStr1 = spinnerStep1.getSelectedItem().toString();
    String myStr2 = spinnerStep2.getSelectedItem().toString();
    int myAnswer = 0;
    try {
        myAnswer = Integer.parseInt(myStr1) * Integer.parseInt(myStr2);
    } catch(NumberFormatException nfe) {
        Log.e("Error", "Failed to multiply invalid non-numbers");
    }
    TextView drakeAnswer = (TextView)findViewById(R.id.drake_answer); 
    drakeAnswer.setText("" + myAnswer);
}

The problem may lie in this line

drakeAnswer.setText(myAnswer);  

The setText method of TextView is overloaded, and one of them is :

setText(int resid) 

Which is the one you are currently calling, and there probably isn't a resId like the one you are passing. If you want to write myAnswer in the TextView , pass it as String :

drakeAnswer.setText(myAnswer);

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