gpt4 book ai didi

android - onSharedPreferenceChanged 问题中的 setSummary(txt)

转载 作者:行者123 更新时间:2023-11-29 18:20:54 26 4
gpt4 key购买 nike

我在 XML 文件中定义了一个 PreferenceScreen,如下所示:

<PreferenceCategory android:title="Choose Days">
<PreferenceScreen android:title="Days of Week" android:key="daysOfWeek">
<CheckBoxPreference android:title="Mondays" android:key="chkMonday"></CheckBoxPreference>
<CheckBoxPreference android:title="Tuesdays" android:key="chkTuesday"></CheckBoxPreference>
<CheckBoxPreference android:title="Wednesdays" android:key="chkWednesday"></CheckBoxPreference>
<CheckBoxPreference android:title="Thursdays" android:key="chkThursday"></CheckBoxPreference>
<CheckBoxPreference android:title="Fridays" android:key="chkFriday"></CheckBoxPreference>
<CheckBoxPreference android:title="Saturdays" android:key="chkSaturday"></CheckBoxPreference>
<CheckBoxPreference android:title="Sundays" android:key="chkSunday"></CheckBoxPreference>
</PreferenceScreen>
</PreferenceCategory>
<PreferenceCategory android:title="Other Settings">
<CheckBoxPreference android:title="Enable" android:defaultValue="true" android:key="enable"></CheckBoxPreference>
</PreferenceCategory>

当我点击 PreferenceScreen:daysOfWeek 时,会出现复选框,当我选中或取消选中一个框时,会触发 onSharedPreferenceChanged。

这是因为:

public class Muteny extends PreferenceActivity implements OnSharedPreferenceChangeListener {

并在我的 .java 文件中的 onResume 中注册它,并在 onPause 中注销它。

简化的 onSharedPreferenceChanged 看起来像这样:

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
PreferenceScreen daysOfWeek = ((PreferenceScreen)findPreference("daysOfWeek"));
daysOfWeek.setSummary("text for summary");
Toast.makeText(this.getApplicationContext(), "Hello", Toast.LENGTH_LONG).show();
}

问题是“daysOfWeek”的摘要永远不会更新。如果我随后将 CheckBoxPreference 切换为“启用”(此时什么都不做,但会触发更改),则摘要会按照我希望在切换“日框”时执行的操作进行更新。

尽管显示了 Toast 中的消息...

选中“日期框”时如何更新 PreferenceScreen 的摘要?

最佳答案

这个问题经常出现。

您可以查看以下几个其他答案以寻找可能的解决方案。不过,我从未确定过让我 100% 满意的解决方案。

PreferenceScreen android:summary update !

Update existing Preference-item in a PreferenceActivity upon returning from a (sub)PreferenceScreen

在我见过的所有“解决方案”中,似乎效果最好的是在调用 setSummary(...) 之后调用 onContentChanged()。关于这样做是否安全存在一些争论。

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
String key) {
if (key.startsWith("chk")) {
PreferenceScreen prefscreen = ((PreferenceScreen)findPreference("daysOfWeek"));
prefscreen.setSummary(key);
onContentChanged();
}
}

关于android - onSharedPreferenceChanged 问题中的 setSummary(txt),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5499976/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com