【问题标题】:refreshing views of Preferences when using PreferenceActivity使用 PreferenceActivity 时刷新 Preferences 视图
【发布时间】:2011-06-17 02:02:42
【问题描述】:

我正在尝试强制 PreferenceActivity 刷新。有谁知道怎么做?

我有一个 ResetDefaultsPreference 类,它是 Preference 的子类,并且在单击时应该将所有键以某个前缀开头的首选项重置为默认值。它可以工作,但是当我点击重置首选项时,该屏幕中的任何首选项都不会更新,直到我退出屏幕并重新进入。(这适用于一些自定义颜色首选项,但即使这也不适用于某些@ 987654325@s - 对于那些我必须离开并重新输入 PreferenceActivity 本身以显示更新值的人。)

我试图通过获取根视图并invalidate()ing 来解决此问题,但这似乎不起作用。这是刷新显示的行。它是 Preference 子类的一部分,该子类保留了在 mContext 中创建的 Context

((Activity)mContext).findViewById(android.R.id.content).invalidate();

这发生在更改并提交首选项值之后。 (值会改变,但显示不会。)有谁知道我可以如何强制 PreferenceActivity 自行刷新?

【问题讨论】:

  • 该课程的完整源代码,感兴趣的朋友可以here获取。
  • 我发现了一个部分有效的技巧:重置默认值后,调用setSummary(getSummary() + " "); 或从Preference 调用类似的东西来更改首选项的摘要,这会导致视图刷新。这适用于自定义颜色首选项,但更新ListPreference对话框中的值。
  • 你试过PreferencenotifyChanged()notifyHierarchyChanged()吗?

标签: java android


【解决方案1】:

我不知道“刷新” PreferenceActivity 的方法,但您可以给用户制造错觉。它将关闭并重新打开没有动画的活动,因此它看起来好像值刚刚发生变化。

Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);

【讨论】:

  • 正是我想要的。非常感谢!
猜你喜欢
  • 2011-08-04
  • 1970-01-01
  • 2013-02-14
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
相关资源
最近更新 更多