Preference (SharedPreference,PreferenceActivty,PreferenceFragment)
Preference
Preference は、Androidアプリケーションで設定やユーザーの状態を保存・管理するための仕組みです。
SharedPreferences
SharedPreferences は、キーと値のペアを保存し、簡単な永続的なデータ保存を実現するための仕組みです。設定やユーザーの状態などを保存するのに便利です。
private val sharedPreferences: SharedPreferences by lazy {
getSharedPreferences("MyPreferences", Context.MODE_PRIVATE)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// データの書き込み
val editor = sharedPreferences.edit()
editor.putString("username", "JohnDoe")
editor.putInt("userAge", 25)
editor.apply()
// データの読み込み
val username = sharedPreferences.getString("username", "")
val userAge = sharedPreferences.getInt("userAge", 0)
}
PreferenceActivty
PreferenceActivity は、Androidアプリケーションにおいて、ユーザーがアプリの設定や個人化を行うための画面を提供するための特別なアクティビティです。
PreferenceFragment
PreferenceFragment は、Androidアプリケーション内で設定画面を構築するためのフラグメントです。
PreferenceFragmentはXMLファイルを使用して設定画面を構築します。
import android.os.Bundle
import androidx.preference.PreferenceFragmentCompat
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
// ユーザー名入力の Preference
val usernamePreference = findPreference("username")
usernamePreference?.summaryProvider = EditTextPreference.SimpleSummaryProvider.getInstance()
}
}
res/xml/preferences.xml
XMLには、ユーザーが変更できる設定項目やオプションが定義されます。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<EditTextPreference
android:key="username"
android:title="Username"
android:summary="Enter your username"
android:inputType="text" />
</PreferenceScreen>
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
// ユーザー名入力の Preference
val usernamePreference = findPreference<EditTextPreference>("username")
// ユーザー名を設定
usernamePreference?.text = "JohnDoe"
// サマリーの表示を更新
usernamePreference?.summaryProvider = Preference.SummaryProvider<EditTextPreference> {
preference -> preference.text
}
}
}