2013-06-12 9 views
6

Ich habe eine Unterklasse von PreferenceFragment erstellt, die CompoundButton.OnCheckedChangeListener implementiert. Ich habe eine Präferenz, die eine Switch (eine Unterklasse von CompoundButton) enthält. Hier ist der Rückruf ich erstellt habe, wenn der Wert des Schalters ändert:Schaltfläche Listener funktioniert nicht in Präferenzfragment

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    mAppController.doSomething(isChecked); 
    Log.v("rose_tag", "hi"); 
} 

ich den Vorzug in OnCreate erklären, wie folgt:

Switch mySwitch = (Switch) myView.findViewById(R.id.switch); 
mySwitch.setEnabled(true); 
mySwitch.setOnCheckedChangeListener(this); 

Der Rückruf aufgerufen wird, wenn der Blick zuerst öffnet (a Haltepunkt im Callback wird getroffen), aber kein Protokoll wird gedruckt, und der Callback wird nie wieder aufgerufen, auch wenn ich den Switch ein- und ausschalte. Wie kann ich diesen Rückruf durchführen?

Ich habe auch versucht, eine inline anonyme Listener zu erstellen. Ich habe auch versucht, eine einfache Button mit einem onClick Listener zu verwenden, und das hat auch nicht funktioniert.

+0

haben Sie Ihre Importe überprüft? Manchmal kommt es vor, dass eine falsche Importdeklaration vorliegt. Wird Ihr onCheckedChangeListener wie folgt importiert: android.widget.CompoundButton.OnCheckedChangeListener? – Opiatefuchs

+0

Ich habe 'import android.widget.CompoundButton' –

+0

vielleicht eine Alternative zu: mySwitch.setOnCheckedChangeListener (new OnCheckedChangeListener() {}); anstatt auf implementierten checkedChangeListener zu setzen. Könnten Sie das versuchen? – Opiatefuchs

Antwort

8

Ich kann sehen, Sie versuchen, PreferenceFragment als jedes andere normale Fragment zu verwenden. Sie müssen jedoch den richtigen Mechanismus zählen, z. B. wenn Sie nicht alle Widgets zum Erstellen einer Voreinstellungsansicht für den Benutzer verwenden können, müssen Sie die Objekte Preference verwenden (siehe Vorzugsunterklassen).

Ein anderes Beispiel ist, dass Sie addPreferencesFromResource(int) verwenden müssen, um Voreinstellungen von einer XML-Ressource aufzublasen.

Überprüfen Sie beide Links oben und dieses example.

Ich hoffe, es hilft Ihnen.

2

Wenn Sie den Anwser von Jorge Gil verwenden, können Sie nicht einfach einen Verweis auf die Ansicht erhalten, die Sie im Preferencescreen deklarieren. Sie können jedoch leicht eine der Präferenz-Objekt, die in diesem Fall eine SwitchPreference ist. Also in Ihrem res/xml/preferences.xml fügen Sie Ihre Schalter Präferenz:

<?xml version="1.0" encoding="utf-8"?> 
<PreferenceScreen 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:key="screen"> 

    <SwitchPreference 
      android:key="switch_preference" 
      android:title="title" 
      android:summary="summary" /> 

</PreferenceScreen> 

Dann in Ihrem PreferenceFragment/PreferenceActivity der onCreate Funktion hinzufügen:

addPreferencesFromResource(R.xml.preferences);  
    SwitchPreference switchPref = (SwitchPreference) findPreference("switch_preference"); 

    switchPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { 

     @Override 
     public boolean onPreferenceChange(Preference preference, Object newValue) { 
      Log.e(getClass().getSimpleName(),"onPreferenceChange:" + newValue); 
      return true; 
     } 
    }); 
Verwandte Themen