2016-12-29 3 views
-1

нужна помощь здесь! У меня есть счетчик, который определяет, является ли пользователь мужчиной или женщиной. Я хочу рассчитать bmr. Если пользователь является мужчиной, формула bmr отличается по сравнению с самкой. Таким образом, я пытался создать текстовое представление, которое отображает строковое содержимое элемента spinner, поскольку к переменной нельзя получить доступ в методе onItemSelected.Как использовать условия If-Else в классе spinner setOnItemSelectedListener?

Вот почему у меня есть часть II, где я использую инструкцию if-else, чтобы в основном сравнить тексты с строкой и, надеюсь, передать bmr в другую активность, но это не работает, поскольку я получаю неправильное значение по умолчанию ,

spGender = (Spinner) findViewById(R.id.spinnerGender); 
    final TextView tvGender = (TextView)findViewById(R.id.tvGenderTemp); 
    spGender.setSelection(0); 

    spGender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      String item = parent.getItemAtPosition(position).toString(); 
      tvGender.setText(item); 

     } 


     @Override 
     public void onNothingSelected(AdapterView<?> parent) { 
      AlertDialog alertDialog = new AlertDialog.Builder(UserProfile.this).create(); 
      alertDialog.setTitle("Alert"); 
      alertDialog.setMessage("Please select a gender!"); 
      alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      alertDialog.show(); 
      spGender.setSelection(0); 
     } 
    }); 


    //BMR FORMULA PART II 
    final double bmr; 

    if ("Female".equals(tvGender.getText().toString())) 

    { 
     bmr = (655 + (13.7*userWeight) + (5.0*userHeight) - (6.8*userAge)); 
    } 

    else 
    { 
     bmr = 66 + (13.7 * userWeight) + (1.8*userHeight) - (4.7*userAge); 
    } 


    Button btnUPSave = (Button)findViewById(R.id.btnUserProfileSave); 
    btnUPSave.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(), "Saved!", 
        Toast.LENGTH_LONG).show(); 

      Intent in2 = new Intent(getApplicationContext(), CaloriesPage.class); 
      in2.putExtra("mBMR",bmr); 
      startActivity(in2); 
     } 
    }); 
+0

попробовать проверить, как 'если ("Женщины". equalsIgnoreCase (tvGender.getText(). toString())) ' –

+0

Здравствуйте, вопрос имеет 2 вопроса здесь: - // ФОРМА ФОРМУЛЫ BMR не запускается после вас выберите пол ==> поместите его в 'onItemSelected' -' onNothingSelected' не будет звонить в spinner, поэтому диалог не будет отображаться –

+0

Спасибо, ребята! Технически все вы, ребята, правы. Хотелось бы подумать, что мой код тоже правильный, немного сложный. Причина этого заключалась в том, что моя двойная переменная была объявлена ​​в классе spinner и что она должна быть объявлена ​​до @Override, как то, что написал Сантош Кумар. – coffeeboi619

ответ

0

Попробуйте надеюсь, что это будет работать

Spinner spGender; 
    double bmr; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     List<String> spinnerArray = new ArrayList<>(); 
     spinnerArray.add("male"); 
     spinnerArray.add("female"); 
     spGender = (Spinner) findViewById(R.id.spinnerGender); 
     ArrayAdapter arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, spinnerArray); 
     spGender.setAdapter(arrayAdapter); 
     final TextView tvGender = (TextView) findViewById(R.id.tvGenderTemp); 
     spGender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
       String item = parent.getItemAtPosition(position).toString(); 
       tvGender.setText(item); 
       //BMR FORMULA PART II 
       double userWeight = 10; 
       double userHeight = 20; 
       double userAge = 35; 
       if (spGender.getSelectedItem().equals("female")) 
       { 
        bmr = (655 + (13.7 * userWeight) + (5.0 * userHeight) - (6.8 * userAge)); 
       } else { 
        bmr = 66 + (13.7 * userWeight) + (1.8 * userHeight) - (4.7 * userAge); 
       } 

      } 
      @Override 
      public void onNothingSelected(AdapterView<?> parent) { 
       AlertDialog alertDialog = new AlertDialog.Builder(MainActivity.this).create(); 
       alertDialog.setTitle("Alert"); 
       alertDialog.setMessage("Please select a gender!"); 
       alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       alertDialog.show(); 
      } 
     }); 
     Button btnUPSave = (Button) findViewById(R.id.btnUserProfileSave); 
     btnUPSave.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Toast.makeText(getApplicationContext(), "Saved!", 
         Toast.LENGTH_LONG).show(); 

       Intent in2 = new Intent(getApplicationContext(), Main2Activity.class); 
       in2.putExtra("mBMR", bmr); 
       startActivity(in2); 
      } 
     }); 

    } 
0

Получить выбранный элемент непосредственно от блесны и сравнить его

spGender.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 

     if ("Female".equals(spGender.getSelectedItem().toString())){ 
     bmr = (655 + (13.7*userWeight) + (5.0*userHeight) - (6.8*userAge)); 
     }else{ 
     bmr = 66 + (13.7 * userWeight) + (1.8*userHeight) - (4.7*userAge); 
     } 

    } 


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

    } 
}); 
+0

Это не сработает, потому что я передаю переменную другой активности и по методу putExtra, я получаю сообщение о том, что bmr не может быть разрешено. – coffeeboi619

+0

Можете ли вы показать мне, где вы проходите, и как вы это делаете –

+0

Я узнал моя ошибка уже. Причина, по которой я получал это сообщение, состояла в том, что у меня не было хорошей практики объявления bmr непосредственно перед @Override в OnCreate. Позиция bmr имела большое значение, и я думал, что было бы одинаково объявить их внутри внутреннего класса spinner – coffeeboi619

0
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
     String item = parent.getItemAtPosition(position).toString(); 
     tvGender.setText(item); 
     if (item .equals("Female")){ 
      bmr = (655 + (13.7*userWeight) + (5.0*userHeight) - (6.8*userAge)); 
     }else{ 
      bmr = 66 + (13.7 * userWeight) + (1.8*userHeight) - (4.7*userAge); 
     } 

} 
Смежные вопросы