2017-01-19 2 views
0

PreferenceActivityに2 SwitchPreferenceを使用しようとしました。 PreferenceActivityの最初の起動時にはすべて正常です。アクティビティが問題なく開始されたら、settings.xmlが表示されます PreferenceActivityを閉じるか、ClassCastExceptionでアプリケーションが終了するたびにSwitchPreferenceの状態を変更すると問題が発生します。これは、dafaultValueが設定されていない場合にも発生します。その後、PreferenceActivityを開こうとするとアプリは終了します。 これまでは、格納された値にプログラム的にアクセス/影響を及ぼすことはありませんでしたが、テスト目的で設定画面を表示するだけです。メニュー項目がSwitchPreferenceはどのように使用する予定ですか? (ClassCastException)

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

を経由して、呼び出し元のアクティビティにクリック取得する場合の活動は、私は、このようなブールressourcesを定義し、SwitchPreference秒のはdefaultValueを設定するためにそれらを使用するか、または方法を使用するなど、ここで述べたさまざまな提案方法を試してみました開始されます

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

メインアクティビティ。そのアプローチのどれも働かなかった。 SwitchPreferenceは、例外を引き起こすことなく1つの状態を保存できない場合、どのように使用することを意図していますか?環境設定を行うには特定のxml属性を定義する必要がありますか?私が誤って使用されるフィールドで android:keyを:

に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

私は例外の原因を突き止めることができました式@+id/では、キー宣言はID宣言が動作するのと同じように動作すると仮定しています。式@+id/を削除すると、エラーなしでSwitchPreferenceを使用することができました。

関連する問題