1

ここでのエラーを教えてください。トーストメイクの「性別」はfinalに設定する必要があると表示されますが、設定すると、ifステートメントでfinalに設定する必要がないと文句を言います。

@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

内部クラスからローカルの非final変数にアクセスすることはできません。簡単な回避策の1つは、性別の初期値を設定した後、別の最終変数を取得することです。このようにしてください:

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

また、セッター/ゲッターでアクセスできるように、性別をクラススコープ変数にすることもできます

于 2012-04-19T20:47:03.207 に答える
1

onclick トーストに .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. 男性ボタンからテキストを 2 回取得していましたが、女性ボタンからは取得していませんでした。
  3. onCreate メソッドではなくクラスで変数を宣言すると、final などの問題がなく、はるかに優れた動作をします。
  4. 男性ボタンと女性ボタンをチェックするステートメントは、メソッドonClick if(v) 内にある必要があります。それらが外側にある場合、クリックしてもそれらが再評価されることはなく、ボタンをいくら変更しても得られる結果は変わりません。
  5. genderはすでに文字列であり、gender.toString()それを変更するために何もしません。
  6. RadioButton は実際には望んでいることをしません。おそらく ToggleButton が必要です。
  7. 一度に男性または女性のボタンの 1 つだけをチェックできるように、何らかのロジックを入れたいと思うでしょう。これを行うには、それぞれに OnClickListener が必要です。

そうは言っても、これらの多くの変更が行われたコードと、おそらく他のいくつかのものが少しクリーンアップされたコードがあります。

幸運を!

public class AndroidTest extends 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 に答える