在PreferenceFragmentCompat中存储Preference时调用的方法是什么?

时间:2016-04-16 20:12:19

标签: android

我正在使用PreferenceFragmentCompat,当我编辑一个值(在我的情况下来自ListPreference)时,我无法找到覆盖的方法。我只想立即对所选择的值做出反应。

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我找到另一种方式来订阅所有偏好的所有更改:SharedPreferences.OnSharedPreferencesChangeListener。具有两个备选方案的代码如下所示:

import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceFragmentCompat;
import android.util.Log;


/**
 * A simple {@link Fragment} subclass.
 */
public class SettingsFragment extends PreferenceFragmentCompat implements SharedPreferences.OnSharedPreferenceChangeListener, Preference.OnPreferenceChangeListener {


    private static final String TAG = "SettingsFragment";

    private Preference thePreference;

    public SettingsFragment() {
    }

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

        addPreferencesFromResource(R.xml.pref);

        thePreference = findPreference("chosen_theme");

        if (thePreference != null) {
            thePreference.setOnPreferenceChangeListener(this);
        } else {
            Log.d(TAG, "Preference is empty");
        }
    }

    @Override
    public void onCreatePreferences(Bundle bundle, String s) {


    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object o) {

        Log.d(TAG, String.format("Changed: %s", preference.getKey()));

        return true;
    }

    @Override
    public void onResume() {
        super.onResume();

        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
    }

    @Override
    public void onPause() {
        super.onPause();

        getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
    }

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

        Log.d(TAG, String.format("%s %s", sharedPreferences, key));
    }
}

SharedPreferences的速度更快,Preference更灵活。

答案 1 :(得分:0)

我相信您正在寻找在单击Preference时调用的回调的接口定义:

Preference.OnPreferenceClickListener