2017-01-19 64 views
0

我試圖在PreferenceActivity中使用2 SwitchPreference。在PreferenceActivity的第一次開始時,一切正常;活動開始沒有問題,settings.xml會顯示 如果您參加關閉PreferenceActivity或更改SwitchPreference的狀態,則會出現問題:每次應用程序關閉時都會出現ClassCastException。這也沒有設置dafaultValue。之後,如果有人試圖打開PreferenceActivity,該應用將被關閉。 到現在爲止,我不以任何方式以編程方式訪問/影響存儲的值,現在我只想顯示設置屏幕以進行測試。如果一個菜單項被通過打算如何使用SwitchPreference? (ClassCastException)

final Intent i = new Intent(this, SettingsActivity.class); 
       startActivity(i); 

點擊在調用活動的活動將開始我試圖在這裏指出的不同建議的方式如定義布爾ressources並利用它們來設置SwitchPreference S的默認值或者使用方法

PreferenceManager.setDefaultValues(this, R.xml.settings, false); 

在主要活動。沒有任何方法奏效。如果打算使用SwitchPreference,如果顯然無法保存其一個狀態而不會導致異常?是否需要定義特定的xml屬性以使首選項工作?

ClassCastException異常

E/AndroidRuntime: FATAL EXCEPTION: main 
         java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean 
          at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:242) 
          at android.preference.Preference.getPersistedBoolean(Preference.java:1637) 
          at android.preference.Preference.persistBoolean(Preference.java:1608) 
          at android.preference.TwoStatePreference.setChecked(TwoStatePreference.java:79) 
          at android.preference.SwitchPreference$Listener.onCheckedChanged(SwitchPreference.java:54) 
          at android.widget.CompoundButton.setChecked(CompoundButton.java:126) 
          at android.widget.Switch.setChecked(Switch.java:688) 
          at android.widget.CompoundButton.toggle(CompoundButton.java:87) 
          at android.widget.CompoundButton.performClick(CompoundButton.java:99) 
          at android.view.View$PerformClick.run(View.java:16966) 
          at android.os.Handler.handleCallback(Handler.java:615) 
          at android.os.Handler.dispatchMessage(Handler.java:92) 
          at android.os.Looper.loop(Looper.java:137) 
          at android.app.ActivityThread.main(ActivityThread.java:4745) 
          at java.lang.reflect.Method.invokeNative(Native Method) 
          at java.lang.reflect.Method.invoke(Method.java:511) 
          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
          at dalvik.system.NativeStart.main(Native Method) 

PreferenceActivity

public class SettingsActivity extends PreferenceActivity{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.addPreferencesFromResource(R.xml.settings); 
    } 
} 

的settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    [...] 
    <PreferenceCategory 
     android:title="@string/sett_not_header"> 
     <SwitchPreference 
      android:key="@+id/sett_not_on" 
      android:title="@string/sett_not_act_header" 
      android:summary="@string/sett_not_act_summ" 
      android:defaultValue="true"/> 
     <SwitchPreference 
      android:key="@+id/sett_not_mute" 
      android:title="@string/sett_not_mute_header" 
      android:summary="@string/sett_not_mute_summ" 
      android:defaultValue="true"/> 
    [...] 
    </PreferenceCategory> 

</PreferenceScreen> 
+0

你在'string.xml'聲明瞭首選項。在res文件夾中創建xml文件夾並添加您的首選項xml。 –

+0

settings.xml位於res/xml文件夾中 – SilverMonkey

回答

0

我能夠追查異常的原因: 在現場android:key我冒用表達式@+id/假設密鑰聲明的工作方式與id聲明的工作方式相同。刪除表達式@+id/允許我無錯地使用SwitchPreference。

相關問題