0

次の問題があります。背景色を変更するための 3 つのボタン (それぞれ青、赤、緑) と、クリックすると音が鳴る 5 つのラジオ ボタンがあります。背景色変更ボタンとサウンド ラジオ ボタンの両方が独立して完全に正常に機能します。それらを 1 つの画面にまとめるとすぐに、背景色の変更ボタンの 1 つが選択されると、アプリケーションがクラッシュします。問題は RadioButton 行にあり、特に次の場所にあります。

RadioButton rb = (RadioButton) v;

そのエラーに対して何をすべきかわかりません。誰か助けてくれませんか?

onClick メソッドのコードは次のとおりです。

               public void onClick(View v) {


            RelativeLayout rl = (RelativeLayout) findViewById(R.id.RelativeLayout1);

               switch (v.getId()) 
               {
               case R.id.button1:
                   Toast.makeText(getBaseContext(), "You switched the color to red!" , Toast.LENGTH_SHORT ).show();
                   rl.setBackgroundColor(Color.RED);

               break;
               case R.id.button2:
                   Toast.makeText(getBaseContext(), "You switched the color to green!" , Toast.LENGTH_SHORT ).show();
                   rl.setBackgroundColor(Color.GREEN);
               break;
               case R.id.button3:
                   Toast.makeText(getBaseContext(), "You switched the color to blue" , Toast.LENGTH_SHORT ).show();
                   rl.setBackgroundColor(Color.BLUE);
               break;
               case R.id.cancel:
                   Toast.makeText(getBaseContext(), "This application will be closed!" , Toast.LENGTH_SHORT ).show();
                   finish();
               break;
               }


               //Perform action on clicks
                 RadioButton rb = (RadioButton) v;  

                 //get the user sound settings
                 AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

                 //get current volume
                 float actualVolume = (float) audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

                 //get maximum volume
                 float maxVolume = (float) audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

                 float volume = actualVolume / maxVolume;

             //is the sound loaded already?
                 if(loaded) {
                     //play the sound
                     if (rb.getText().toString().equals("Clong!"))
                         gameAudio.play(soundIDs[0], volume, volume, 1, 0, 1f);
                     else if (rb.getText().toString().equals("Hammering!"))
                         gameAudio.play(soundIDs[1], volume, volume, 1, 0, 1f);
                     else if (rb.getText().toString().equals("Chainsaw Attack!"))
                         gameAudio.play(soundIDs[2], volume, volume, 1, 0, 1f);
                     else if (rb.getText().toString().equals("Smoke alarm!"))
                         gameAudio.play(soundIDs[3], volume, volume, 1, 0, 1f);
                     else if (rb.getText().toString().equals("Sharp the knife!"))
                         gameAudio.play(soundIDs[4], volume, volume, 1, 0, 1f);
                 }

           }
4

2 に答える 2

0

これを試して

//Perform action on clicks
if(v instanceof RadioButton)
{
                 RadioButton rb = (RadioButton) v;  
}else return;
于 2013-03-04T14:32:52.563 に答える
0

あなたonClick()はボタンを押すと発射されるように聞こえます...その場合、はボタンView vではありませんRadioButton

その場合、logcat (常にここに含める必要があります) に ClassCastException が表示されます。

2番目の部分全体(音を扱う)を

if( v instanceof RadioButton ) {
    ... your code here
}

そしてあなたは大丈夫なはずです。

于 2013-03-04T14:31:26.950 に答える