我无法识别代码的问题,似乎没有人面对这类问题,因此无法在堆栈溢出中跟踪此问题。
异常消息:
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>
有人请帮我解决。
答案 0 :(得分:3)
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
。
答案 1 :(得分:0)
<?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&gt; = VERSION_CODES.ICE_CREAM_SANDWICH)
{
preference =(SwitchPreference)findPreference(“preference1”);
}
否则
{
preference =(CheckBoxPreference)findPreference(“preference2”);
}
答案 2 :(得分:0)
需要有两个单独的布局。
一个用于布局目录中的检查首选项。
另一个适用于layout-v14目录的SwitchPreference。