1

你能告诉我这里有什么错误吗?它告诉我吐司制作中的“性别”必须设置为最终但当我这样做时,if语句抱怨它不应该是最终的

@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);
        }
    });




}




}
4

4 回答 4

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();

还有其他方法可以做到这一点,但这是最快的。

于 2012-04-19T20:49:54.610 回答
1

错误是:

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

应该

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

您还可以将性别设置为类范围变量,以便您可以使用 setter/getter 访问它

于 2012-04-19T20:47:03.207 回答
1

您在 onclick toast 中缺少 .show() :

      public void onClick(View v) {

                    Toast.makeText(ProfileActivity.this, gender.toString(), 
Toast.LENGTH_LONG).show();
                }
            });
于 2012-04-19T20:47:35.883 回答
1

您那里有太多错误,无法真正完全解决。它们包括:

  1. 您将按钮中的文本抓取到变量中,然后写出文字字符串“男性”和“女性”。
  2. 您从男性按钮抓取文本两次,而不是女性按钮。
  3. 在类中声明你的变量,而不是在 onCreate 方法中,它们会表现得更好,不会有关于最终等的问题。
  4. 检查男性和女性按钮的if语句必须在 onClick(v) 方法中。如果它们在外面,那么单击不会导致它们被重新评估,并且无论更改多少按钮都不会改变您获得的结果。
  5. gender已经是一个字符串,gender.toString()没有任何改变。
  6. RadioButton 并没有真正做你想做的事,你可能想要 ToggleButton。
  7. 您可能想加入一些逻辑,以便一次只能检查一个按钮男性或女性。他们每个人都需要一个 OnClickListener 来执行此操作。

说了这么多,这里的代码做了很多改动,可能还有一些其他的东西清理了一下。

祝你好运!

公共类 AndroidTest 扩展 Activity {

   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();
           }
       });
   }

}

于 2012-04-20T00:53:28.207 回答