-1

我无法识别我的代码的问题,而且似乎没有人面临这种​​问题,因此无法在堆栈溢出中跟踪此问题。

异常消息:

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");
   }
}

__________________    __________________    __________________

设置.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>

有人请帮我弄清楚。

4

3 回答 3

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.

于 2014-05-26T15:34:47.693 回答
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 >= VERSION_CODES.ICE_CREAM_SANDWICH)
{
偏好 = (SwitchPreference) findPreference("preference1");
}
else
{
偏好 = (CheckBoxPreference) findPreference("preference2");
}

于 2014-05-26T16:10:57.883 回答
0

需要有两个单独的布局。

一个用于在布局目录中检查首选项。

另一个用于 layout-v14 目录中的 SwitchPreference。

于 2014-10-01T03:47:33.720 回答