如何在我的 PreferenceScreen 中通过按键引用首选项?
How do I reference a preference option by key in my PreferenceScreen?
我有一个首选项屏幕,我想在 OnCreate 中以编程方式禁用首选项设置的可见性,具体取决于我们使用的 android 版本。
为此,我必须能够引用该特定偏好对象。
虽然我看到很多使用 findPreference() 的示例,但我发现该方法已被弃用,Android studio 没有建议任何类似的方法。
除此之外,我不知道你是如何通过键引用偏好的。
这是我的 activity:
class 设置活动:AppCompatActivity(),
SharedPreferences.OnSharedPreferenceChangeListener {
val Tag = "My Activity:"
companion object {
private val TAG_TITLE = "PREFERENCE_ACTIVITY"
}
override fun onCreate(savedInstanceState: Bundle?) {
val pManager = SharedPreferencesManager(this)
pManager.loadTheme()
super.onCreate(savedInstanceState)
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this)
setContentView(R.layout.activity_settings)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.content_preference, MainPreference()).commit()
} else {
title = savedInstanceState.getCharSequence(TAG_TITLE)
}
supportFragmentManager.addOnBackStackChangedListener {
if (supportFragmentManager.backStackEntryCount == 0) {
setTitle("Settings")
}
}
setUpToolbar()
}
override fun onDestroy() {
super.onDestroy()
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this)
}
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
outState.putCharSequence(TAG_TITLE, title)
}
override fun onSupportNavigateUp(): Boolean {
if (supportFragmentManager.popBackStackImmediate()) {
return true
}
return super.onSupportNavigateUp()
}
private fun setUpToolbar() {
supportActionBar?.setTitle("Settings")
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
}
class MainPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
recreate()
}
}
我认为您可能指的是首选项 API 的非支持库版本,这些版本确实会在 API 29 之后被弃用。但是在 PreferenceFragmentCompat
中,findPreference
仍然是您应该使用的方法。
您可以在此处查看方法文档:findPreference(CharSequence)
。
我有一个首选项屏幕,我想在 OnCreate 中以编程方式禁用首选项设置的可见性,具体取决于我们使用的 android 版本。 为此,我必须能够引用该特定偏好对象。
虽然我看到很多使用 findPreference() 的示例,但我发现该方法已被弃用,Android studio 没有建议任何类似的方法。
除此之外,我不知道你是如何通过键引用偏好的。
这是我的 activity:
class 设置活动:AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
val Tag = "My Activity:"
companion object {
private val TAG_TITLE = "PREFERENCE_ACTIVITY"
}
override fun onCreate(savedInstanceState: Bundle?) {
val pManager = SharedPreferencesManager(this)
pManager.loadTheme()
super.onCreate(savedInstanceState)
PreferenceManager.getDefaultSharedPreferences(this)
.registerOnSharedPreferenceChangeListener(this)
setContentView(R.layout.activity_settings)
if (savedInstanceState == null) {
supportFragmentManager.beginTransaction()
.replace(R.id.content_preference, MainPreference()).commit()
} else {
title = savedInstanceState.getCharSequence(TAG_TITLE)
}
supportFragmentManager.addOnBackStackChangedListener {
if (supportFragmentManager.backStackEntryCount == 0) {
setTitle("Settings")
}
}
setUpToolbar()
}
override fun onDestroy() {
super.onDestroy()
PreferenceManager.getDefaultSharedPreferences(this)
.unregisterOnSharedPreferenceChangeListener(this)
}
override fun onSaveInstanceState(outState: Bundle, outPersistentState: PersistableBundle) {
super.onSaveInstanceState(outState, outPersistentState)
outState.putCharSequence(TAG_TITLE, title)
}
override fun onSupportNavigateUp(): Boolean {
if (supportFragmentManager.popBackStackImmediate()) {
return true
}
return super.onSupportNavigateUp()
}
private fun setUpToolbar() {
supportActionBar?.setTitle("Settings")
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true)
}
class MainPreference : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
recreate()
}
}
我认为您可能指的是首选项 API 的非支持库版本,这些版本确实会在 API 29 之后被弃用。但是在 PreferenceFragmentCompat
中,findPreference
仍然是您应该使用的方法。
您可以在此处查看方法文档:findPreference(CharSequence)
。