Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SharedReferences不会立即更新首选项。需要重新启动应用程序_Java_Android_Sharedpreferences - Fatal编程技术网

Java SharedReferences不会立即更新首选项。需要重新启动应用程序

Java SharedReferences不会立即更新首选项。需要重新启动应用程序,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在尝试根据用户偏好更新应用程序布局。做出首选项后,应用程序需要重新启动以使首选项生效。我希望它立即发生而不重新启动。这是我的活动课 public class MainActivity extends Activity implements OnClickListener { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

我正在尝试根据用户偏好更新应用程序布局。做出首选项后,应用程序需要重新启动以使首选项生效。我希望它立即发生而不重新启动。这是我的活动课

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();        
}

通过这种方式,您可以在启动时读取首选项,因为您正在onCreate中调用这些方法。如果要在发生更改时执行某些操作,必须在活动中注册listner,然后在onDestroy中注销它。请参阅RegisterOnSharedReferenceChangeListener方法的SharedReferences。

这与Main活动的生命周期有关。问题是,当主活动在做出首选项后返回焦点时,onCreate方法不会被调用。因此,将布局设置移动到onStart或onResume方法解决了我的问题。

这将帮助您:模式多进程


SharedReferences=context.getSharedReferenceSutils.WIDG_PREFC,模式多进程

举个例子,请参见第一个响应:RegisterOnSharedReferenceChangeListener和unregisterOnSharedPreferenceChangeListener首选项侦听器没有帮助。我试过了。我想你的问题在于运行时的主题,而不是共享首选项。请看这里: