2012-04-19 5 views
1

Не могли бы вы рассказать мне, что здесь является ошибкой? он говорит мне, что «пол» в тост макияж должен быть установлен в финал, но когда я делаю, то если заявления жалуются, что оно не должно быть окончательнымпроблема с окончательной переменной во внутреннем классе

@Override 
protected void onCreate(Bundle savedInstanceState) { 

    String gender = null; 

    Toast.makeText(this, R.string.ok, Toast.LENGTH_LONG).show(); 
super.onCreate(savedInstanceState); 
setContentView(R.layout.createprofile); 



    RadioButton rb_male = (RadioButton) findViewById(R.id.maleradiobutton); 
String male=rb_male.getText().toString(); 

    RadioButton rb_female = (RadioButton) findViewById(R.id.femaleradiobutton); 
    String female=rb_male.getText().toString(); 

    if(rb_male.isChecked()) { gender = "male";} 
    if(rb_female.isChecked()){ gender = "female";} 

    Button checkgender = (Button) findViewById(R.id.gendercheck); 
    checkgender.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 

      Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG); 
     } 
    }); 




} 




} 

ответ

1

У вас слишком много ошибок, чтобы действительно обратиться полностью. Они включают в себя:

  1. Вы берете текст с кнопки на переменные, тогда вы произвольно записываете буквенные строки «мужчина» и «женщина».
  2. Вы дважды хватали текст от мужской кнопки и никогда не использовали женскую кнопку.
  3. Объявите свои переменные в классе, а не в методе onCreate, и они будут вести себя намного лучше, не имея проблем с окончанием и так далее.
  4. Ваши if заявления, проверяющие мужские и женские кнопки, должны находиться внутри метода onClick (v). Если они находятся снаружи, то щелчок не заставляет их переоцениваться, и никакие изменения в кнопках не изменят результат, который вы получите.
  5. gender уже является строкой, gender.toString() ничего не меняет.
  6. RadioButton действительно не делает то, что вы хотите, вы, вероятно, хотите ToggleButton.
  7. Возможно, вы захотите установить некоторую логику, так что только одна из кнопок мужского или женского пола может быть проверена одновременно. Для этого им понадобится OnClickListener.

Сказав это, вот код с большим количеством внесенных изменений и, возможно, некоторые другие вещи немного почищены.

Удачи вам!

общественный класс AndroidTest расширяет активность {

String gender = null; 
    RadioButton rb_male; 
    RadioButton rb_female; 
    Button checkgender; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     Toast.makeText(this, "OK", Toast.LENGTH_LONG).show(); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     rb_male = (RadioButton) findViewById(R.id.maleradiobutton); 
     rb_female = (RadioButton) findViewById(R.id.femaleradiobutton); 

     checkgender = (Button) findViewById(R.id.gendercheck); 
     checkgender.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       if (rb_male.isChecked()) { 
        gender = "male"; 
       } 
       if (rb_female.isChecked()) { 
        gender = "female"; 
       } 
       Toast.makeText(AndroidTest.this, (CharSequence) gender, Toast.LENGTH_LONG).show(); 
      } 
     }); 
    } 

}

1

Ошибка:

Toast.makeText(ProfileActivity.this, gender.toString(), Toast.LENGTH_LONG); 

должны быть

Toast.makeText(v.getContext(), gender.toString(), Toast.LENGTH_LONG).show(); 

И вы можете также сделать пол переменной видимости класса, так что вы можете получить доступ к нему с сеттер/геттер

+0

Он по-прежнему дает мне ту же ошибку, в основном то, что вы сделали это, чтобы добавить .show(), но моя проблема не Gui связаны ..речь идет о определенном переменном gender –

1

ваш отсутствуют .Show() в OnClick тостов:

 public void onClick(View v) { 

        Toast.makeText(ProfileActivity.this, gender.toString(), 
Toast.LENGTH_LONG).show(); 
       } 
      }); 
+0

Он по-прежнему дает мне ту же ошибку, в основном, что вы сделали, это добавить .show(), но моя проблема связана не с графическим интерфейсом. Это вопрос о определенном переменном gender –

4

Вы не можете получить доступ к локальной переменной нон окончательной из внутреннего класса. Одним легким обходным путем является принятие другой конечной переменной после установки начального значения для пола. Делай так:

if(rb_male.isChecked()) { gender = "male";} 
if(rb_female.isChecked()){ gender = "female";} 
final String finalGender = gender; 

и позже

Toast.makeText(ProfileActivity.this, finalGender.toString(), Toast.LENGTH_LONG).show(); 

Есть и другие способы сделать это, но это самый быстрый.

+0

small исправление, не конечная локальная переменная (которая определена внутри метода). можно получить доступ к переменной экземпляра не конечного экземпляра. – kosa

+0

Это правильно, спасибо. Я сделаю изменения. – azertiti

+0

Спасибо, это работает, но тогда тост держит меня «мужчиной» все время! –

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