这一定经常发生。
当用户在android应用程序中编辑首选项时,我希望他们能够在应用程序中看到当前设置的首选项值 Preference
总结。
示例:如果我有“丢弃旧邮件”的首选项设置,该设置指定需要清理邮件的天数。在 PreferenceActivity
我希望用户看到:
“丢弃旧邮件”<-标题
“x天后清理邮件”<-摘要,其中x是当前首选项值
额外积分:使其可重用,这样我就可以轻松地将其应用于我所有的首选项,而不管它们的类型如何(这样它就可以用最少的编码处理edittextpreference、listpreference等)。
30条答案
按热度按时间izkcnapc1#
设置
ListPreference
对于在对话框中选择的值,可以使用以下代码:并参考
yourpackage.ListPreference
在你的preferences.xml
记得在那里指定你的名字android:defaultValue
因为这会触发对onSetInitialValue()
.如果需要,您可以在调用之前修改文本
setSummary()
任何适合你的申请。o0lyfsai2#
如果您使用的是androidx,则可以使用自定义
SummaryProvider
. 这种方法可用于任何情况Preference
.文档(java)中的示例:
文档中的示例(kotlin):
crcmnpdw3#
我的解决方案是创建一个自定义
EditTextPreference
,在xml中使用,如下所示:<com.example.EditTextPreference android:title="Example Title" />
edittextpreference.java:-oxalkeyp4#
对于edittextpreference:
当然,如果您需要特定的edittextpreference,我会想到这个解决方案,但您可以对每个preference都这样做:
............
............
然后在onresume()中;
在:
yi0zb3m45#
必须在oncreate方法上使用bindpreferencesummarytovalue函数。
例子:
参见第3课关于udacity android课程:https://www.udacity.com/course/viewer#!/c-ud853/l-1474559101/e-1643578599/m-1643578601
piok6c0g6#
这里,所有这些都是从eclipse示例中截取的
SettingsActivity
. 我必须复制所有这些太多的代码来展示这些android开发者如何完美地选择更通用和稳定的编码风格。我留下了修改密码
PreferenceActivity
到平板电脑和更大的api。注:事实上,我只是想评论一下“谷歌的preferenceactivity示例也很有趣”。但是我没有足够的声望点,所以请不要怪我。
(抱歉英语不好)
w1jd8yoj7#
由于在androidx中,首选项类具有summaryprovider接口,因此可以在不使用onsharedpreferencechangelistener的情况下完成。edittextpreference和listpreference提供了简单的实现。根据eddieb的答案,它可能是这样的。在androidx上测试。首选项:首选项:1.1.0-alpha03。
but5z9lq8#
供参考:
这就更有理由去看这张非常光滑的照片
Answer
上面的@asd(此处找到来源)说要使用%s
在里面android:summary
对于中的每个字段preferences.xml
. (优先权的当前值被替换为%s
.)6kkfgxo09#
简单地说:
vngu2lb810#
以下是我的解决方案:
构建首选项类型“getter”方法。
构建“setsummaryinit”方法。
初始化
创建包含preferenceactivity并实现onsharedpreferencechangelistener的公共类
apeeds0o11#
如果您只想将每个字段的纯文本值显示为其摘要,那么下面的代码应该是最容易维护的代码。它只需要两次更改(第13行和第21行,标有“此处更改”):
rjee0c1512#
t1qtbnec13#
我用listpreference的以下后代解决了这个问题:
从1.6到4.0.4,对我来说似乎工作得很好。
cpjpxq1n14#
我已经看到所有投票的答案都显示了如何将摘要设置为准确的当前值,但op也希望类似于:
“x天后清理邮件”*<-摘要,其中x是当前首选项值
以下是我实现这一目标的答案
根据
ListPreference.getSummary()
:返回此listpreference的摘要。如果摘要中有字符串格式标记(即“%s”或“%1$s”),则将替换当前条目值。
然而,我在几个设备上试过这个,但似乎不起作用。通过一些研究,我在这个答案中找到了一个很好的解决方案。它只包括扩展每个
Preference
您可以使用并覆盖getSummary()
按照android文档的规定工作。nhn9ugyo15#
谢谢你的详细解释!
如果这对任何人都有帮助的话,我必须修改reto meier提出的代码,使其与android 1.5的sdk一起工作
同样的更改也适用于回调函数
onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key)
干杯克里斯