Android onPreferenceClick与我无关

Android onPreferenceClick与我无关,android,onpreferenceclicklistener,Android,Onpreferenceclicklistener,我尝试在我的onPreferenceClick中执行一些代码,但没有成功 我做了一个设置活动计算并扩展了PreferenceActivity 然后我实现了OnPreferenceClickListener @SuppressWarnings("deprecation") @Override protected void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences()

我尝试在我的onPreferenceClick中执行一些代码,但没有成功

我做了一个设置活动计算并扩展了PreferenceActivity

然后我实现了OnPreferenceClickListener

    @SuppressWarnings("deprecation")
@Override
protected void onPause() {
    super.onPause();

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

@SuppressWarnings("deprecation")
@Override
protected void onResume() {
    super.onResume();

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

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    if (key.equals("Point")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(",", "."));
    } else if (key.equals("Comma")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(".", ","));
    } else if (key.equals("Space")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(",", " "));
    } else if (key.equals("Off")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(" ", ""));
    }
}
这是我的设置活动课

    DecimalFormat df = new DecimalFormat("@##,###,###,###");
private Calculation mCalculation;
private TextView mCalculatorDisplay;

@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    addPreferencesFromResource(R.xml.settings);

}

@SuppressWarnings("deprecation")
@Override
public boolean onPreferenceClick(Preference preference) {
    if (preference.getKey().equals("Point")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult()).replaceAll(",", "."));

    } else if (preference.getKey().equals("Comma")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult()).replaceAll(".", ","));

    } else if (preference.getKey().equals("Space")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult()).replaceAll(",", " "));

    } else if (preference.getKey().equals("Off")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult()).replaceAll(" ", ""));


        getPreferenceManager().getSharedPreferences().edit()
        .putInt("unreadcount", 0).commit();
    }
    return true;
}
这是我的arrays.xml

    <string-array name="decimalNumber">
    <item name="P">Point</item>
    <item name="C">Comma</item>
    <item name="S">Space</item>
    <item name="O">Off</item>
</string-array>
<string-array name="decimalNumberValues">
    <item name="P">P</item>
    <item name="C">C</item>
    <item name="S">S</item>
    <item name="O">O</item>
</string-array>
这给了我一个错误:


05-24 11:10:24.127:E/AndroidRuntime1025:java.lang.RuntimeException:无法恢复活动{com.com.ecalc/com.com.ecalc.Z_SettingsActivity}:java.lang.ClassCastException:com.com.ecalc.Z_SettingsActivity无法强制转换为android.content.SharedReferences$OnSharedPreferenceChangeListener

我认为您必须在onPause和onStart方法中的SharedReferenceChangeListener上注册您的对象


看这里:

您的对象不是实现了共享首选项ChangeListener吗?你怎么称呼它呢?它是在PreferenceClickListener上实现的
    @SuppressWarnings("deprecation")
@Override
protected void onPause() {
    super.onPause();

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

@SuppressWarnings("deprecation")
@Override
protected void onResume() {
    super.onResume();

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

public void onSharedPreferenceChanged(SharedPreferences sharedPreferences,
        String key) {
    if (key.equals("Point")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(",", "."));
    } else if (key.equals("Comma")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(".", ","));
    } else if (key.equals("Space")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(",", " "));
    } else if (key.equals("Off")) {
        mCalculatorDisplay.setText(df.format(mCalculation.getResult())
                .replaceAll(" ", ""));
    }
}