如何解决Android 共享应用常量最佳实践
我想知道通过应用管理共享常量的最佳做法是什么。 问题是在 View 和 viewmodel 以及 XML 资源文件和 SharedPreferences 中以一致的命名使用它们。
例如,让我们从偏好开始。
@AndroidEntryPoint
class PreferencesAspectFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?,rootKey: String?) {
setPreferencesFromresource(R.xml.preferences_aspect,rootKey)
}
}
所以,我们在preferences_aspect.xml中有:
<ListPreference
app:defaultValue="by_label"
app:entries="@array/preferences_aspect_sort_order_entries"
app:entryValues="@array/preferences_aspect_sort_order_values"
app:key="aspect.sort_order"
app:title="@string/preferences_aspect_sort_order"
app:useSimpleSummaryProvider="true" />
我们的键存储在 arrays.xml 中
<string-array name="preferences_aspect_sort_order_values">
<item>by_label</item>
<item>by_label_desc</item>
<item>by_created</item>
<item>by_created_desc</item>
</string-array>
如果我需要在应用程序中获取存储的偏好值,我需要编写:
val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext())
val preferencesSort = sharedPreferences.getString("aspect.sort_order","")
如果我想使用它:
when(preferencesSort){
"by_label" -> sortByLabel()
"by_label_desc" -> sortByLabelDesc()
"by_created" -> sortByCreated()
"by_created_desc" -> sortByCreatedDesc()
else -> sortByLabel()
}
等等。我使用了很多字符串:
"aspect.sort_order" "by_label" "by_label_desc" "by_created" "by_created_desc"
容易出现拼写错误,而我想使用常量。或者,至少是在一个点上定义的字符串。
<resources xmlns:tools="http://schemas.android.com/tools" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2" tools:ignore="MissingTranslation">
<string name="key.sort.by_label" translatable="false">
<xliff:g id="key.sort.by_label">sort.by_label</xliff:g>
</string>
<string name="key.sort.by_label_desc" translatable="false">
<xliff:g id="key.sort.by_label_desc">sort.by_label_desc</xliff:g>
</string>
</resources>
而不是在其他 XML 文件中使用它:
<string-array name="preferences_aspect_sort_order_values">
<item>@string/key.sort.by_label</item>
<item>@string/key.sort.by_label_desc</item>
...
如果我需要在视图中使用这些常量,我可以使用:
getString(R.string.key_sort_by_label)
我根本不喜欢这个解决方案,它不干净,也不简洁,有点混乱。 此外,在 viewmodel 中,我需要参考上下文才能使用 getString,这不是一个好主意。
那么避免所有这些字符串来命名我的常量的最佳方法是什么?
非常感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。