Android Studio非法状态异常:找不到android:onClick的方法(视图)

时间:2018-11-28 21:48:29

标签: android android-studio

我正在使用单选按钮来切换项目中的颜色。当用户单击单选按钮之一时,我希望将关联的主题保存到SharedPreferences。设置了必要的主题,但是单击单选按钮时,会引发此错误:

    java.lang.IllegalStateException: Could not find method onThemeRadio(View) in a parent or ancestor Context for android:onClick attribute defined on view class android.widget.RadioButton with id 'theme2'

相关的XML和Java块如下所示。 Java:

    public void onThemeRadio(View view){
    SharedPreferences themeStorage = PreferenceManager.getDefaultSharedPreferences(this);
    SharedPreferences.Editor themeStorageEditor = themeStorage.edit();
    boolean checked = ((RadioButton)view).isChecked();
    int themeId = themeStorage.getInt("themeId",1);
    switch(view.getId()) {
        case R.id.theme1:
            if (checked)
                themeId = 1;
            break;
        case R.id.theme2:
            if (checked)
                themeId = 2;
            break;
        case R.id.theme3:
            if (checked)
                themeId = 3;
            break;
    }
    themeStorageEditor.putInt("themeId",themeId);
    themeStorageEditor.apply();
}

XML:

            <RadioGroup
        android:id="@+id/themeRadio"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:checkedButton="@+id/theme1"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/theme1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="onThemeRadio"
            android:text="Default Theme" />

        <RadioButton
            android:id="@+id/theme2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="onThemeRadio"
            android:text="Alternate Theme" />

        <RadioButton
            android:id="@+id/theme3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="onThemeRadio"
            android:text="Combined Theme" />
    </RadioGroup>

我已经阅读了一些类似的问题,但是这些修复都没有起作用或没有应用。 预先感谢!

1 个答案:

答案 0 :(得分:0)

根据您提供的有限代码很难区分。但是根据错误消息,您似乎在正确的位置没有onThemeRadio(View)方法。它必须是使用该XML布局的Activity类上的方法。使用Android Studio帮您解决。例如,Android Studio是否将onThemeRadio(View)突出显示为未使用的方法?还是XML中的onclick属性被标记为该方法丢失或签名错误?这些迹象表明该方法在错误的位置。您还可以使用突出显示的onclick属性旁边弹出的灯泡在正确的位置自动创建方法。