2013-08-24 4 views
8

Ich bin jetzt eine Vorliebe Seite für meine appSwitchPreference und CheckBoxPreference in Code

Nach API-14 zu schaffen, ist switchpreference zur Verfügung. und ich möchte es benutzen checkboxpreference auf API14 ersetzen + Geräten

Es ist leicht res/xml und res/xml-14 verwenden, um die richtige XML-Ressource

jedoch in dem kodierenden Teil zu bekommen, ist es nicht so bequem zu Umschalten der Präferenz gemäß der API.

public class SettingActivity extends PreferenceActivity { 
    private CheckBoxPreference enable; 
    private SwitchPreference enablev14; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     addPreferencesFromResource(R.xml.setting); 
     if (Build.VERSION.SDK_INT < 14) 
      enable = (CheckBoxPreference) findPreference(key_enable); 
     else 
      enablev14 = (SwitchPreference) findPreference(key_enable); 
    } 
    ... 
} 

Jetzt ist meine Art und Weise ist, wenn-Klausel zu verwenden, um die Build.VERSION zu überprüfen und das entsprechende Objekt erhalten, sie zu verarbeiten. Aber es ist ziemlich unbequem und schwer, den Code zu verwalten. Hat jemand einen klügeren Weg, es zu tun?

Antwort

12

Vielleicht könnten Sie ein android:key Attribut Ihre beiden SwitchPreference und CheckBoxPreference xml, nur wie folgt aus:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <CheckBoxPreference 
     android:key="pref_sync" 
     android:title="@string/pref_sync" 
     android:defaultValue="true" /> 
</PreferenceScreen> 

und

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> 
    <SwitchPreference 
     android:key="pref_sync" 
     android:title="@string/pref_sync" 
     android:defaultValue="true" /> 
</PreferenceScreen> 

Und dann können Sie überprüfen, ob dieser Schlüssel gibt true zurück, oder false auf Ihrem Code, etwas wie folgt:

public class SettingActivity extends PreferenceActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    addPreferencesFromResource(R.xml.setting); 
    PreferenceManager preferenceManager = getPreferenceManager(); 
    if (preferenceManager.getSharedPreferences().getBoolean("pref_sync", true)){ 
     // Your switch is on 
    } else { 
     // Your switch is off 
    } 
    ... 
} 

Hoffe, das funktioniert für dich.

+1

Dank. Perfekt gearbeitet –

1

Je nachdem, was der Code möchte mit der Präferenz Instanz zu tun, es könnte so einfach sein wie zu Preference anstelle einem bestimmten abgeleiteten Typ Gießen, zB:

enable = (Preference)findPreference(key_enable); 

die dann etwas erlauben würde, wie:

enable.setEnabled(true); 

und beseitigen Sie die Notwendigkeit, API-Ebene im Code zu überprüfen.

6

Verwenden Sie in Ihrem Java-Code TwoStatePreference, eine übergeordnete Klasse für CheckBoxPreference und SwitchPreference. Es enthält alle Methoden, die Sie in Ihrem Anwendungsfall benötigen.

Dies ist, was das Codebeispiel Sie möchte, zur Verfügung gestellt aussehen:

public class SettingActivity extends PreferenceActivity { 
    private TwoStatePreference enable; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     addPreferencesFromResource(R.xml.setting); 
     enable = (TwoStatePreference) findPreference(key_enable); 
    } 
    ... 
} 
+0

Aber TwoStatePreference wurde in API-Ebene 14 hinzugefügt, so dass Sie es nicht in den Fällen verwenden können, in denen Sie die CheckBoxPreference benötigen – BeniBela

Verwandte Themen