OnSharedPreferenceChangeListener赢了吗?

时间:2016-05-30 08:34:42

标签: java android sharedpreferences

我试图在prefs区域中更改首选项时,通过主题更改应用程序背景颜色和字体类型。

到目前为止,我的首选项有效,但是当我将侦听器放入时,它就不会被调用。我正在测试使用吐司以查看它是否出现。

我的代码:

package alertssystem.lsa13tafeproj.lsa13.resistorcalculator;

import android.app.ActionBar;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Color;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.widget.RelativeLayout;
import android.widget.Toast;

import java.util.prefs.PreferenceChangeEvent;
import java.util.prefs.PreferenceChangeListener;

public class Prefs extends PreferenceActivity
{

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        getFragmentManager().beginTransaction().replace(android.R.id.content, new PreferencesFragment()).commit();
    }



    @Override
    public void onBackPressed()
    {
        Intent intent = new Intent(getApplicationContext(), MainActivity.class);
        startActivity(intent);
    }

    public static class PreferencesFragment extends PreferenceFragment
    {
        @Override
        public void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            addPreferencesFromResource(R.xml.prefs);
        }
    }
}

上面的代码中没有changeListener,因为我找不到任何解决方案,有人可以告诉我如何实现这一点。

用户单击ListPreference并且它已插入2个选项,但选择新选项时没有任何操作。

1 个答案:

答案 0 :(得分:1)

这对我有用:

public class MyPreferenceFragment extends PreferenceFragment implements
    OnSharedPreferenceChangeListener {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs);
        PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onDestroy() {
        PreferenceManager.getDefaultSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(this);
        super.onDestroy();
    }

    @Override
    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
        // Toast
    }
}

确保在更改pref之前注册您的监听器,而不是取消注册,直到您这样做。