我无法用代码识别问题,而且似乎没有人面临这种问题,因此无法跟踪堆栈中的溢出。
异常消息:
Caused by: java.lang.ClassCastException: android.preference.CheckBoxPreference cannot be cast to android.preference.SwitchPreference
代码:
private Preference preference;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
addPreferencesFromResource(R.xml.settings);
loadAllViews();
}
private void loadAllViews()
{
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH)
{
preference = (SwitchPreference) findPreference("preference"); //Exception occurs here.
}
else
{
preference = (CheckBoxPreference) findPreference("preference");
}
}
__________________ __________________ __________________
settings.xml:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
<CheckBoxPreference
android:key="preference"
android:title="yes_or_no" />
</PreferenceScreen>
请有人帮我弄清楚。
CheckBoxPreference
不是extends
SwitchPreference
;这两个类都是TwoStatePreference
的子类。
从您的代码中,您似乎引用了两个不同偏好组件的一个偏好键:
if (VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH)
{
preference = (SwitchPreference) findPreference("preference"); //Exception occurs here.
}
else
{
preference = (CheckBoxPreference) findPreference("preference");
}
正如您所看到的,这将适用于正确的首选项类型,但它将为不正确的类型抛出ClassCastException
。确保您引用的是正确TwoStatePreference
的正确密钥。
<?xml version="1.0" encoding="utf-8"?>
<SwitchPreference
android:key="preference1"
android:title="yes_or_no" />
<CheckBoxPreference
android:key="preference2"
android:title="yes_or_no" />
在代码中:
偏好偏好
if(VERSION.SDK_INT>=VERSION_CODES.ICE_CREAM_SANDWICH(
{
preference=(SwitchPreference(findPreference("preference1"(
}
其他
{
preference=(CheckBoxPreference(findPreference("preference2"(
}
需要有两个独立的布局。
一个用于布局目录中的检查首选项。
另一个用于layout-v14目录中的SwitchPreference。