我正在使用单选按钮来切换项目中的颜色。当用户单击单选按钮之一时,我希望将关联的主题保存到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>
我已经阅读了一些类似的问题,但是这些修复都没有起作用或没有应用。 预先感谢!
答案 0 :(得分:0)
根据您提供的有限代码很难区分。但是根据错误消息,您似乎在正确的位置没有onThemeRadio(View)方法。它必须是使用该XML布局的Activity类上的方法。使用Android Studio帮您解决。例如,Android Studio是否将onThemeRadio(View)突出显示为未使用的方法?还是XML中的onclick属性被标记为该方法丢失或签名错误?这些迹象表明该方法在错误的位置。您还可以使用突出显示的onclick属性旁边弹出的灯泡在正确的位置自动创建方法。