我正在尝试根据用户偏好更新应用布局。在进行首选后,应用程序需要重新启动才能使首选项生效。我想让它立即发生而不重启。这是我的Activity类。
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);
SharedPreferences getPrefs = PreferenceManager
.getDefaultSharedPreferences(getBaseContext());
theme = getPrefs.getString("themelist", "0");
switch(theme){
case "0":
setContentView(R.layout.mainactivity);
break;
case "1":
setContentView(R.layout.mainactivity_black);
break;
}
initialize();
setClickListeners();
}
答案 0 :(得分:0)
通过这种方式,您可以在启动时读取首选项,因为您正在调用onCreate中的方法。如果您想在更改发生时执行某些操作,则必须在活动中注册一个列表器并在onDestroy()中取消注册。请参阅SharedPreferences的registerOnSharedPreferenceChangeListener()方法。
答案 1 :(得分:0)
它必须与MainActivity的生命周期有关。问题是当主要活动在做出偏好后返回焦点时,onCreate()方法不会被调用。因此,将布局设置移动到onStart()或onResume()方法可以解决我的问题。
答案 2 :(得分:-1)
这将帮助您:“MODE_MULTI_PROCESS”
sharedpreferences = context.getSharedPreferences(Utils.WIDG_PREFC, MODE_MULTI_PROCESS);