2013-05-08 20 views
1

我試圖評估我的偏好在我的Java代碼,以啓用/禁用其他選項,他們選擇不做其他選項...到目前爲止我只想實現OnPreferenceClickListener,但我從來沒有看到變化的祝酒。我究竟做錯了什麼?似乎還有很多這樣的其他問題,但我看不出他們的錯誤。onPreferenceClick和OnPreferenceClickListener

public class UserSettingActivity extends PreferenceActivity implements OnPreferenceClickListener{ 
    SharedPreferences mPreferences; 
    Boolean frequency; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 
    } 


    @Override 
    public boolean onPreferenceClick(Preference preference) { 
     mPreferences = PreferenceManager.getDefaultSharedPreferences(this); 
     frequency = mPreferences.getBoolean("frequency", true); 

     Context context = getApplicationContext(); 
     Toast.makeText(context, "Hello toast 0!", Toast.LENGTH_LONG).show(); 

     if (!frequency) { 
      Context context2 = getApplicationContext(); 
      Toast.makeText(context2, "Hello toast 1!", Toast.LENGTH_LONG).show(); 

     } else if (preference.getKey().equals("schedulestop")) { 

     } else if (preference.getKey().equals("priority")) { 

     } else { 
      Context context3 = getApplicationContext(); 
      Toast.makeText(context3, "Hello toast 0!", Toast.LENGTH_LONG).show(); 
     } 
     return false; 
    } 

} 

回答

3

你必須爲PreferenceClickListener註冊每個個人偏好

somePreference.setOnPreferenceClickListener(this); 

,或者您可以使用getSharedPreferences().registerOnSharedPreferenceChangeListener所有的喜好。

public class UserSettingActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener{ 
SharedPreferences mPreferences; 
Boolean frequency; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    addPreferencesFromResource(R.xml.settings); 
} 

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

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

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

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


@SuppressWarnings("deprecation") 
@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    if (key.equals("schedulestop")) { 
     // do something 
    } 
    else if (key.equals(...... 
} 
} 
+0

在onCreate上設置了嗎? – jcaruso 2013-05-08 20:30:42

+0

在onCreate或onStart或onResume中註銷onDestroy,onStop或onPause。 – 2013-05-08 20:32:35

+0

你能告訴我一個如何直接將它實現到我的代碼的例子。看看例子,我沒有看到如何做到沒有錯誤。 – jcaruso 2013-05-08 20:35:06

0

首先實現 「OnSharedPreferenceChangeListener」

PreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener 

然後

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

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    settings.registerOnSharedPreferenceChangeListener(this); 

} 

THEN

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    SharedPreferences SP = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 

    switch (key) { 
     case "pref_key_auto_delete": 
      boolean notificationStatus = SP.getBoolean(key, false); 
      Log.d("stat", String.valueOf(notificationStatus)); 
      break; 

     case "pref_key_notification_list": 
      String downloadType = SP.getString(key, "n/a"); 
      Log.d("stat", String.valueOf(downloadType)); 
      break; 
    } 
相關問題