因此,我试图在我的android应用程序中创建一个选项菜单,但是当我在模拟器中单击它时,应用程序就会崩溃,并得到以下错误:
androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.PreferenceGroup我不知道我在这里做了什么,我希望有人知道。
设置活动:
public class SettingsActivity extends AppCompatActivity {
public static final String KEY_PREF_EXAMPLE_SWITCH = "example_switch";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content,
new SettingsFragment()).commit();
}
}片段类
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState,
String rootKey) {
setPreferencesFromResource(R.xml.preferences, rootKey);
}
}方法在我的MainActivity中:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
// Launch SettingsActivity
if (id == R.id.action_settings) {
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}编辑这里也是我的布局文件:
<?xml version="1.0" encoding="utf-8"?>
<SwitchPreferenceCompat xmlns:android="http://schemas.android.com/apk/res/android">
<SwitchPreference
android:defaultValue="false"
android:key="vega_preference"
android:summaryOff="@string/vega_off_string"
android:summaryOn="@string/vega_on_string"
android:title="@string/vega_switch_title" />
<SwitchPreference
android:defaultValue="false"
android:key="vegan_preference"
android:summaryOff="@string/vegan_off_string"
android:summaryOn="@string/vegan_on_string"
android:title="@string/vegan_switch_title" />
</SwitchPreferenceCompat>发布于 2022-03-16 20:40:16
androidx.preference.SwitchPreferenceCompat cannot be cast to androidx.preference.PreferenceGroup
代码片段setPreferencesFromResource(R.xml.preferences, rootKey)是引发这种情况的原因,因为它期望使用PreferenceGroup而不是首选项视图。其中SwitchPreferenceCompat不是PreferenceGroup。
这是因为您使用SwitchPreferenceCompat作为设置屏幕的根元素。相反,您需要使用从PreferenceScreen扩展而来的PreferenceGroup。
因此,要解决这个问题,需要确保首选项布局的根元素是PreferenceScreen。
https://stackoverflow.com/questions/71503813
复制相似问题