2014-05-24 19 views
1

我試圖在我的onPreferenceClick做一些代碼,但它沒有奏效。onPreferenceClick不與我合作

我做了一個SettingActivity Calss,並擴展了PreferenceActivity。

然後我實現了OnPreferenceClickListener。

這裏是我的設置活動課

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> 

而且在settings.xml的文件夾中的xml:

<PreferenceCategory android:title="@string/pref_user_settings" > 
    <ListPreference 
     android:entries="@array/decimalNumber" 
     android:entryValues="@array/decimalNumberValues" 
     android:key="prefdecimalNumber" 
     android:summary="@string/number_format_summary" 
     android:title="@string/number_format" /> 
</PreferenceCategory> 

這裏是一個照片我的用戶設置: enter image description here

我想要做的是通過點擊每一個改變十進制數字格式的方式。

感謝提前:)

更新:我這樣做是爲了註冊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(" ", "")); 
    } 
} 

它給我這個錯誤:

十一月5日至24日:10:24.127:E/AndroidRuntime(1025):了java.lang.RuntimeException:無法恢復活動{com.com.ecalc/com.com.ecalc.Z_SettingsActivity}:java.lang.ClassCastException:com.com.ecalc.Z_SettingsActivity無法轉換爲android.content.SharedPreferences $ OnSharedPreferenceChangeListener

回答

0

我認爲你必須在你的sharedPreferenceChangeListener中註冊你的對象在你的onPause()和onStart() - 方法

看這裏:https://stackoverflow.com/a/16449611/2924941

+0

嘿,謝謝。我更新了我的問題,請你檢查一下。 – user3051834

+0

是不是實現OnSharedPreferenceChangeListener的對象?你怎麼稱呼它? – migos

+0

其實現OnPreferenceClickListener – user3051834