【发布时间】:2022-01-23 11:07:19
【问题描述】:
我想使用首选项摘要来显示首选项的当前值,因此我想在首选项更改时更新摘要。所讨论的首选项是一个存储位置,由用户通过意图交互选择,使用 Android 的存储访问框架。我已经为此苦苦思索了好几个小时,尝试了在 SO 线程中找到的各种东西,但我就是不知道调用了 setSummary、findPreference、onSharedPreferenceChanged、onSharedPreferenceChangeListener 的组合我需要在哪个班级。
我的代码目前看起来像这样:
const val REQUEST_TARGET_FOLDER = 4
class SettingsActivity : AppCompatActivity() {
private lateinit var prefs: SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_activity)
if (savedInstanceState == null) {
supportFragmentManager
.beginTransaction()
.replace(R.id.settings, SettingsFragment())
.commit()
}
}
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey)
// from: https://stackoverflow.com/questions/63575398/how-to-correctly-receive-and-store-a-local-directory-path-in-android-preferences
val targetDirPreference: Preference? = findPreference("export_dir")
targetDirPreference?.setOnPreferenceClickListener {
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
activity?.startActivityForResult(intent, REQUEST_TARGET_FOLDER)
true
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) {
super.onActivityResult(requestCode, resultCode, intent)
// from: https://stackoverflow.com/questions/34331956/trying-to-takepersistableuripermission-fails-for-custom-documentsprovider-via
if (requestCode == REQUEST_TARGET_FOLDER && resultCode == RESULT_OK && intent != null) {
val treeUri = intent.data
if (treeUri != null) {
// do stuff
}
with(prefs.edit()) {
putString("export_dir", intent.data.toString())
apply()
}
}
}
}
这是所涉及的偏好:
<Preference
android:key="export_dir"
android:title="Export to directory:" />
有人可以帮我弄清楚当用户选择目录时如何设置/更新首选项的摘要吗? (目录选择部分本身目前有效。)
【问题讨论】:
标签: android kotlin preferences