2013-05-06 1 views
0

У меня есть onCheckedChanged, который говорит мне, что нажата RadioButton в RadioGroup.String не принимает значение

RadioGroup rGroup = (RadioGroup)findViewById(R.id.rdgroup); 
     // This will get the radiobutton in the radiogroup that is checked 
     RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(rGroup.getCheckedRadioButtonId()); 

     rGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() 
     { 
      public void onCheckedChanged(RadioGroup rGroup, int checkedId) 
      { 
       // This will get the radiobutton that has changed in its check state 
       RadioButton checkedRadioButton = (RadioButton)rGroup.findViewById(checkedId); 
       // This puts the value (true/false) into the variable 
       boolean isChecked = checkedRadioButton.isChecked(); 
       // If the radiobutton that has changed in check state is now checked... 
       if (isChecked) 
       { 
        String tmp = checkedRadioButton.getText().toString(); 
        //Toast t = Toast.makeText(NeuesKind.this, checkedRadioButton.getText(), Toast.LENGTH_SHORT); 
        // 
        // t.show(); 
        if(tmp == "Männlich"){ 
         geschlecht = "männlich"; 
        } 
        if(tmp == "Weiblich"){ 
         geschlecht = "weiblich"; 
        } 

        Toast t1 = Toast.makeText(NeuesKind.this, geschlecht, Toast.LENGTH_SHORT); 
        t1.show(); 
//     Toast t = Toast.makeText(NeuesKind.this, checkedRadioButton.getText(), Toast.LENGTH_SHORT); 
//     t.show(); 
       } 
      } 
     }); 

Когда я использую первое Toast что outcommented сейчас, это говорит мне, что ТМР «männlich» или «Weiblich». Когда я использую второй Toast t1, я скажу, что geschlecht пуст. Декларация geschlecht находится на самом верху моего класса, потому что она мне также нужна в моем классе onCreate.

Почему geschlecht не принимает значение tmp?

+0

проверить состояние с помощью "equalsIgnoreCase". – pudaykiran

ответ

3

В Java, делая ==, означает, что он будет сравнивать ссылки этих двух объектов. Вы должны фактически сравнить текст объектов путем вызова метода строки equals, как это:

   if (tmp.equals("Männlich")) { 
        geschlecht = "männlich"; 
       } 

       if (tmp.equals("Weiblich")) { 
        geschlecht = "weiblich"; 
       } 

Однако, также было бы гораздо проще для вас, чтобы сделать это:

geschlecht = tmp.toLowerCase(); // toLowerCase will make all the characters lowercase (as you've done in your if block) 
+0

Хорошо, конечно. Как глупо со мной. Спасибо! Примите ваш ответ, когда это возможно. – user896692

1

Вы не сравнивая содержимое строковых с кодом, а объект, использовать equals или equalsIgnoreCase, например, так:

if ("Männlich".equalsIgnoreCase(tmp)) { 
    geschlecht = "männlich"; 
} 
if ("Weiblich".equalsIgnoreCase(tmp)) { 
    geschlecht = "weiblich"; 
} 
1

использования tmp.compareTo ("Mannlich") не tmp ==