2013-08-07 95 views
0

在我的Android应用程序中,我使用SharedPreferences让用户管理一些设置。现在,在用户更改任何设置并从设置页面返回到应用后,我希望我的视图(片段)使用SharedPreferences中的最新值。反映设置更新视图更新

更改可能包括重新加载自定义视图以使用颜色方案或删除列表视图的过滤。

当前只有当应用程序重新启动时,才会应用所需的更改。我确信有办法解决我的问题,但我无法弄清楚。

假设我支持Android 2.2及更高版本,因此任何较新的API都不能使用,除非它存在于支持库中。

回答

1

不完全确定你的问题是什么,但在我看来,当你的用户改变一个设置,然后点击后退按钮返回到片段,你没有看到更改?如果是这种情况,那是因为当用户返回时,android会恢复堆栈中的碎片(在做任何更改之前)的版本。我的建议是尝试将新共享的prefs加载到片段的onResume方法。这样他们应该在用户返回时加载。

试试这个

@Override 
public void onResume(){ 
super.onResume(); 
setContentView(R.layout.currentFrag); 

} 

这应该用正确的改变重新加载页面。

+0

更新了问题。你怀疑的和我的意图是一样的。我不清楚你给出的建议,但是,我目前不在我的碎片中启动“首选项活动”,因为它是一项全局活动,并非特定于碎片。 – midhunhk

+0

啊我明白了。那么发生什么事是当用户改变他们的设置,然后点击后退按钮。该片段被重新加载,但在按下后退按钮时,片段的oncreate不会被调用,因此该页面永远不会被重新加载,并且从未看到UI的更改。至少在页面重新加载之前。 – KBusc

+0

谢谢了,让我试试这个 – midhunhk

0

您需要使用onWindowFocusChanged方法来检查当前活动是否失去焦点。

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    // TODO Auto-generated method stub 
    super.onWindowFocusChanged(hasFocus); 
    // Add the code to perform on the fragments after the settings have changed. 
}