2014-05-24 14 views
1

onPreferenceClick에서 일부 코드를 시도했지만 작동하지 않았습니다.onPreferenceClick이 나와 작동하지 않습니다

나는 SettingActivity Calss를 만들었고 나는 PreferenceActivity를 확장했다.

그런 다음 OnPreferenceClickListener를 구현합니다. 여기

는 XML 폴더 내 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의 내 설정 작업 클래스 다음

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; 
} 

입니다 :

<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 등록이했다.

11월 5일에서 24일까지 : 10 :

@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(" ", "")); 
    } 
} 

그 날이 오류를 제공 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