2014-02-17 44 views
0

在一項活動中,我有幾個Spinners和TexView。我希望每當用戶通過調用類中定義的方法來更改Spinner中的值時,可以更改TextView的內容。如何在Android中選擇一個Spinner項目時更新TextView?

這裏是我做的:

Decleare在類項目:

private Spinner spinner_age, spinner_weight, spinner_sex, spinner_height, 
     spinner_level_activity, spinner_goal; 
private TextView textView_to_goal_disp, textView_neededCal_disp; 

我@Override上onCreate方法,並找到ID的VIW:

spinner_age = (Spinner) findViewById(R.id.spinner_age); 
    spinner_weight = (Spinner) findViewById(R.id.spinner_weight); 
    spinner_sex = (Spinner) findViewById(R.id.spinner_sex); 
    spinner_height = (Spinner) findViewById(R.id.spinner_height); 
    spinner_goal = (Spinner) findViewById(R.id.spinner_goal); 
    spinner_level_activity = (Spinner) findViewById(R.id.spinner_level_activity); 

    textView_to_goal_disp = (TextView) findViewById(R.id.textView_to_goal_display); 
    textView_neededCal_disp = (TextView) findViewById(R.id.textView_needed_calories_display); 

再次在onCreate方法中,我定義了一個OnItemSelectedListener並將其分配給Spinners:

OnItemSelectedListener itemSelect = new OnItemSelectedListener() { 

     @Override 
     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 

      // My method i want to execute if an item is selected or changed 
      calculateParameters(spinner_age, spinner_weight, spinner_sex, spinner_height, spinner_goal, 
        spinner_level_activity, textView_to_goal_disp, textView_neededCal_disp); 

     } 

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

     }   
    }; 

    spinner_age.setOnItemSelectedListener(itemSelect); 
    spinner_goal.setOnItemSelectedListener(itemSelect); 
    spinner_height.setOnItemSelectedListener(itemSelect); 
    spinner_level_activity.setOnItemSelectedListener(itemSelect); 
    spinner_sex.setOnItemSelectedListener(itemSelect); 
    spinner_weight.setOnItemSelectedListener(itemSelect); 

,這裏是定義在類我calculateParameters方法:

public static void calculateParameters(Spinner sp_age, Spinner sp_weight, Spinner sp_sex, 
     Spinner sp_height, Spinner sp_goal, Spinner sp_lvl_act, TextView txt_to_goal_disp, 
     TextView need_cal_disp) { 

    int weight, height, age; 

    weight = Integer.parseInt(sp_weight.getSelectedItem().toString()); 
    height = Integer.parseInt(sp_height.getSelectedItem().toString()); 
    age = Integer.parseInt(sp_age.getSelectedItem().toString()); 

    float[] BMR = new float[2]; 
    float[] TDEE = new float[2]; 

    BMR[0] = (float) (66 + (13.7 * weight) + (5 * height) - (6.8 * age)); // Men 
    BMR[1] = (float) (655.1 + (9.563 * weight) + (1.850 * height) - (4.676 * age)); // Woman 



    // Initializing 0 - Men ; 1 - Women 

    // Activity factor 
    float[] AF = new float[2]; 

    switch (sp_lvl_act.getSelectedItemPosition()) { 
    case 0: 
     for(int i=0; i<2;i++){ 
      AF[i] =  (float) (BMR[i] * 1.2);  // (Little or no exercise, desk job); 
     } 
     break; 
    case 1:for(int i=0; i<2;i++){ 
     AF[i] =(float) (BMR[i] * 1.375);// (Light exercise/sports 1-3 days a week); 
    } 
     break; 
    case 2: 
     for(int i=0; i<2;i++){ 
     AF[i] =(float) (BMR[i] * 1.55); // (Moderate exercise/sports 3-5 days a week); 
     } 
     break; 
    case 3: 
     for(int i=0; i<2;i++){ 
     AF[i] =(float) (BMR[i] * 1.725); // (Hard exercise/sports 6-7 days a week); 
     } 
     break; 
    case 4: 
     for(int i=0; i<2;i++){ 
     AF[i] =(float) (BMR[i] * 1.9);// (Hard daily exercise/sports and physical job or 2x day training, ie; 
     } 
     break; 

    default: 
     break; 
    } 

     // Maintance level 
    for(int i =0; i < 2; i++){ 
     TDEE[i] = BMR[i] * AF[i]; 
    } 

    switch (sp_sex.getSelectedItemPosition()) { 
    case 0: 
     txt_to_goal_disp.setText(Float.toString(TDEE[0])); 
     break; 
    case 1: 
     need_cal_disp.setText(Float.toString(TDEE[1])); 
     break; 

    default: 
     break; 
    } 

    int currentWeight = Integer.parseInt(sp_weight.getSelectedItem().toString()); 
    int goalWeight = Integer.parseInt(sp_goal.getSelectedItem().toString()); 
    txt_to_goal_disp.setText(Math.abs(currentWeight)-goalWeight); 

} 

應用崩潰時,我開始這項活動。

這是我的logcat和我得到的錯誤:

FATAL EXCEPTION: main 
Process: com.example.appscan5, PID: 13339 
android.content.res.Resources$NotFoundException: String resource ID #0x0 
at android.content.res.Resources.getText(Resources.java:244) 
at android.widget.TextView.setText(TextView.java:3888) 
at com.example.appscan5.SettingParameters.calculateParameters(SettingParameters.java:164) 
at com.example.appscan5.SettingParameters$1.onItemSelected(SettingParameters.java:45) 
at android.widget.AdapterView.fireOnSelected(AdapterView.java:893) 
at android.widget.AdapterView.access$200(AdapterView.java:48) 
at android.widget.AdapterView$SelectionNotifier.run(AdapterView.java:861) 
at android.os.Handler.handleCallback(Handler.java:733) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:136) 
at android.app.ActivityThread.main(ActivityThread.java:5017) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:515) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
at dalvik.system.NativeStart.main(Native Method) 
+0

你要顯示的值在TextView中所有選擇的Spinners? – SMR

+0

我想使用Spinners中的選定項目來計算一個值,然後我想在textView中顯示該值(在這種情況下,2個值顯示在2個文本視圖中) – NewestStackOverflowUser

回答

1

的TextView只接受字符串不是整數或浮點數... 編寫以下

txt_to_goal_disp.setText(""+(Math.abs(currentWeight)-goalWeight)); 
+0

謝謝感謝修復我的問題。 – NewestStackOverflowUser

相關問題