Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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
Android 在应用程序重新启动之前,首选项不会得到更新_Android_Android Preferences - Fatal编程技术网

Android 在应用程序重新启动之前,首选项不会得到更新

Android 在应用程序重新启动之前,首选项不会得到更新,android,android-preferences,Android,Android Preferences,我从用户处获取IP、端口和设备名称设置,并在初始化对象时使用它们。但是,当我放置设置时,这些设置不会在应用程序中更新,直到我重新启动应用程序 这是我的设置文件- @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.layout.settings);

我从用户处获取IP、端口和设备名称设置,并在初始化对象时使用它们。但是,当我放置设置时,这些设置不会在应用程序中更新,直到我重新启动应用程序

这是我的设置文件-

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        addPreferencesFromResource(R.layout.settings);

        SharedPreferences sp = getPreferenceScreen().getSharedPreferences();
        EditTextPreference editTextPrefLAN = (EditTextPreference) findPreference("prefABCLan");
        editTextPrefLAN
                .setSummary(sp.getString("prefABCLan", "Set your LAN IP"));





        EditTextPreference editTextPrefPort = (EditTextPreference) findPreference("prefABCPort");
        editTextPrefPort
                .setSummary(sp.getString("prefABCPort", "Set your port"));
        EditTextPreference editTextPrefDeviceName = (EditTextPreference) findPreference("prefABCDeviceName");
        editTextPrefDeviceName
                .setSummary(sp.getString("prefABCDeviceName", "Set your device name"));

        /*EditTextPreference editTextPrefScopeIP = (EditTextPreference) findPreference("prefScopeIP");
        editTextPrefScopeIP
                .setSummary(sp.getString("prefScopeIP", "Set your Scope IP"));
        EditTextPreference editTextPrefScopeLogin = (EditTextPreference) findPreference("prefScopeLogin");

*/


    }

    protected void onResume() {
        super.onResume();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
    }

    protected void onStop() {
        super.onStop();
        getPreferenceScreen().getSharedPreferences()
                .registerOnSharedPreferenceChangeListener(this);
    }

    protected void onPause() {
        super.onPause();
        getPreferenceScreen().getSharedPreferences()
                .unregisterOnSharedPreferenceChangeListener(this);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.actionbar, menu);

        return true;
    }

    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
                                          String key) {
        Preference pref = findPreference(key);
        if (pref instanceof EditTextPreference) {
            EditTextPreference etp = (EditTextPreference) pref;
            pref.setSummary(etp.getText());
        }
    }

在我的代码中有什么我需要做的吗?

当用户在
首选项活动中修改首选项时,您仍然需要在应用程序的其他地方做一些事情来使用这些首选项。如果您之前阅读了首选项,现在需要更改的值,则这一点尤其正确

一种方法是重新加载首选项,将首选项读取逻辑放入一个生命周期方法中,如
onResume()
,创建活动/片段时以及用户访问
PreferenceActivity
后返回屏幕时都将调用该方法


另一种方法是在其他组件中使用
OnSharedPreferenceChangeListener
,就像您在这里使用它一样。关心首选项更改的活动(或片段或其他内容)将在共享首选项更改侦听器上注册一个
,并观察相关更改。

当用户在
首选项活动中修改首选项时,您仍然需要在应用程序的其他位置执行某些操作以使用这些首选项。如果您之前阅读了首选项,现在需要更改的值,则这一点尤其正确

一种方法是重新加载首选项,将首选项读取逻辑放入一个生命周期方法中,如
onResume()
,创建活动/片段时以及用户访问
PreferenceActivity
后返回屏幕时都将调用该方法


另一种方法是在其他组件中使用
OnSharedPreferenceChangeListener
,就像您在这里使用它一样。关心首选项更改的活动(或片段或其他内容)将在共享首选项更改侦听器上注册
,并查看相关更改。

首先,您如何确定“应用程序中未更新这些设置”?其次,您的清单中是否有任何
android:process
属性?@commonware最初我在我的应用程序中输入了错误的IP。然后我将更改为正确的IP,并从应用程序中使用这些Pref的另一个活动发送数据。但是活动仍然使用旧的pref而不是新的pref。同样,如果我重新启动应用程序,数据将使用新设置发送。@Commonware为什么我需要在清单中输入进程?“但活动仍然使用旧的Prefs而不是新的Prefs”--您是如何将新的首选项值加载到活动中的?“为什么我需要清单中的流程条目?”--您明确地说,不需要清单中的
android:process
。不过,如果您有这些设置,这可能可以部分解释您的问题。@Commonware IDK,首先,您如何确定“应用程序中没有更新这些设置”?其次,您的清单中是否有任何
android:process
属性?@commonware最初我在我的应用程序中输入了错误的IP。然后我将更改为正确的IP,并从应用程序中使用这些Pref的另一个活动发送数据。但是活动仍然使用旧的pref而不是新的pref。同样,如果我重新启动应用程序,数据将使用新设置发送。@Commonware为什么我需要在清单中输入进程?“但活动仍然使用旧的Prefs而不是新的Prefs”--您是如何将新的首选项值加载到活动中的?“为什么我需要清单中的流程条目?”--您明确地说,不需要清单中的
android:process
。不过,如果你有它们,这也许可以部分解释你的问题。@commonware IDK,