

PreferenceLibraryとkotlinを用いて設定画面を作成したのですがいったんアプリを閉じ再度開けば反映されるものの、そのまま使う場合設定が反映されません。その都度反映させるにはどうすればよいでしょう。

作っているアプリが電卓なので"="を押すたびに以下を実行させましたが駄目でした。

[code]

    val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
                 var mode = sharedPreferences.getString("mode", "increace")
                var LEVEL = sharedPreferences.getString("level", "OFF")
    
[/code]

* * *

### ソースコード

**setting.xml**

[code]

    <?xml version="1.0" encoding="utf-8"?>
    <PreferenceScreen
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
    
        <CheckBoxPreference
            android:defaultValue="true"
            android:key="OnOff"
            android:summaryOn="オン"
            android:summaryOff="オフ"
            android:title="OnOff" />
    
        <ListPreference
            android:defaultValue="OFF"
            android:entries="@array/reply_entries"
            android:entryValues="@array/reply_values"
            android:key="level"
            android:title="List preference"
            app:useSimpleSummaryProvider="true" />
    
    </PreferenceScreen>
    
[/code]

**Seeting.kt**

[code]

    package com.example.myapp
    
    import android.graphics.Color
    import android.os.Bundle
    import android.view.LayoutInflater
    import android.view.View
    import android.view.ViewGroup
    import androidx.preference.PreferenceFragmentCompat
    import com.example.sugoidentaku.R
    
    class Setting : PreferenceFragmentCompat() {
        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
            // res/xml/preferences.xml ファイルに従って設定画面を構成
            setPreferencesFromResource(R.xml.setting, rootKey)
        }
    
[/code]

**MainActivity.kt**

[code]

    val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
            var mode = sharedPreferences.getString("mode", "increace")
            var LEVEL = sharedPreferences.getString("level", "OFF")
    
     supportFragmentManager
                .beginTransaction()
                .replace(R.id.setting,Setting())
                .commit() 
    
[/code]


CC BY-SA 4.0
2021-09-02T16:11:56.923
82190
2021-09-05T13:35:05.833
2021-09-02T16:19:37.797
3060
48013
question
android kotlin
Android アプリで設定が反映されません


ぱっと見た限り、Android StudioのテンプレートからSetting設定をしているように見えます。

CheckBoxPreference の android:key="OnOff" に対して、

[code]

         var mode = sharedPreferences.getString("mode", "increace")
    
[/code]

としているのでこれを

[code]

         var onoff = sharedPreferences.getBoolean("OnOff", false)
    
[/code]

としているかを確認してください。  
また、

[code]

        android:entries="@array/reply_entries"
        android:entryValues="@array/reply_values"
    
[/code]

ここについてもテンプレートのままのようですので、 res/values/arrays.xml の記載を確認してください。

[code]

    <string-array name="reply_values">
        <item>reply</item>
        <item>reply_all</item>
    </string-array>
    
[/code]

この様になっている場合は、levelの返却値は reply か reply_all になります。


CC BY-SA 4.0
2021-09-05T13:35:05.833
82256
2021-09-05T13:35:05.833
48072
82190
answer