2013-09-11 5 views
1

Я пытаюсь написать форму, и в какой-то момент есть два переключателя с запросом на пол человека. Я хочу потребовать, чтобы нажата хотя бы одна кнопка, или они получают тост. Они появляются в activity_main как таковой:NoSuchMethodException с кнопкой радио

<RadioGroup 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal"> 

     <RadioButton 
      android:id="@+id/radioButton1" 
      android:layout_width="wrap_content" 
      android:layout_height="53dp" 
      android:layout_weight="1.00" 
      android:onClick="onRadioButtonClicked" 
      android:text="@string/female" /> 

     <RadioButton 
      android:id="@+id/radioButton2" 
      android:layout_width="wrap_content" 
      android:layout_height="match_parent" 
      android:layout_weight="1.00" 
      android:onClick="onRadioButtonClicked" 
      android:text="@string/male" /> 
</RadioGroup> 

И соответствующий код в MainActivity:

RadioButton rb1, rb2; 
    rb1 = (RadioButton) findViewById(R.id.radioButton1); 
    rb2 = (RadioButton) findViewById(R.id.radioButton2); 
    if(!rb1.isChecked() && !rb2.isChecked()){ 
     Toast.makeText(this, "Please select a gender.", Toast.LENGTH_SHORT).show(); 
     return; 
    } 

Может быть, стоит отметить, что я пытался делать, если заявление с только один & и мое приложение по-прежнему падает после нажатия на переключатель.

Вот LogCat:

09-11 01:21:26.599: E/AndroidRuntime(821): FATAL EXCEPTION: main 
09-11 01:21:26.599: E/AndroidRuntime(821): java.lang.IllegalStateException: Could not find a method onRadioButtonClicked(View) in the activity class com.example.myapplication.MainActivity for onClick handler on view class android.widget.RadioButton with id 'radioButton1' 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.view.View$1.onClick(View.java:3620) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.view.View.performClick(View.java:4240) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.widget.CompoundButton.performClick(CompoundButton.java:100) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.view.View$PerformClick.run(View.java:17721) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.os.Handler.handleCallback(Handler.java:730) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.os.Handler.dispatchMessage(Handler.java:92) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.os.Looper.loop(Looper.java:137) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.app.ActivityThread.main(ActivityThread.java:5103) 
09-11 01:21:26.599: E/AndroidRuntime(821): at java.lang.reflect.Method.invokeNative(Native Method) 
09-11 01:21:26.599: E/AndroidRuntime(821): at java.lang.reflect.Method.invoke(Method.java:525) 
09-11 01:21:26.599: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
09-11 01:21:26.599: E/AndroidRuntime(821): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
09-11 01:21:26.599: E/AndroidRuntime(821): at dalvik.system.NativeStart.main(Native Method) 
09-11 01:21:26.599: E/AndroidRuntime(821): Caused by: java.lang.NoSuchMethodException: onRadioButtonClicked [class android.view.View] 
09-11 01:21:26.599: E/AndroidRuntime(821): at java.lang.Class.getConstructorOrMethod(Class.java:423) 
09-11 01:21:26.599: E/AndroidRuntime(821): at java.lang.Class.getMethod(Class.java:787) 
09-11 01:21:26.599: E/AndroidRuntime(821): at android.view.View$1.onClick(View.java:3613) 
09-11 01:21:26.599: E/AndroidRuntime(821): ... 12 more 

Спасибо.

ответ

6

Создайте способ onRadioButtonClicked, так как вы установили onClick в xml. Поэтому у вас должен быть метод с этим именем в Activity, который может обрабатывать щелчок.

Метод

public void onRadioButtonClicked(View v){ 
    // Your code on click 
} 
0

вы определяли

public void onRadioButtonClicked(View v) 

в качестве линии

android:onClick="onRadioButtonClicked" 

подразумевает?

1

Try Ниже код:

public class MainActivity extends Activity { 

    private RadioGroup radioSexGroup; 
    private RadioButton radioSexButton; 
    private Button btnDisplay; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    addListenerOnButton(); 

    } 

    public void addListenerOnButton() { 

    radioSexGroup = (RadioGroup) findViewById(R.id.radioSex); 
    btnDisplay = (Button) findViewById(R.id.btnDisplay); 

    btnDisplay.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 

       // get selected radio button from radioGroup 
      int selectedId = radioSexGroup.getCheckedRadioButtonId(); 

         if(selected==-1) 
          Toast.makeText(MyAndroidAppActivity.this, 
       "Please Select at least one Gender", Toast.LENGTH_SHORT).show(); 
      // find the radiobutton by returned id 
       radioSexButton = (RadioButton) findViewById(selectedId); 

      Toast.makeText(MyAndroidAppActivity.this, 
       radioSexButton.getText(), Toast.LENGTH_SHORT).show(); 

     } 

    }); 

    } 
} 
1

Определение свойств OnClick в XML-файле onRadioButtonClicked и доступ для этого метода на Java файл,

public void onRadioButtonClicked(View view) { 
    switch (view.getId()) { 
    case R.id.YOUR_ID_RADIO_BUTTON: 
        // write here some one code 
     break; 

    default: 
     break; 
    } 
} 
Смежные вопросы